文档章节

HTTP内容类型 Content-Type

six_sun
 six_sun
发布于 2017/09/06 22:49
字数 754
阅读 5
收藏 0

 htttp 错误代码   415 –不支持的媒体类型。 一般在客户端使用了服务端不支持的Content-Type后出现

 Content-Type 用于 定义网络文件的类型和网页的编码

 

 在spring MVC中通过使用 @RequestBody 注解启用 spring自带的报文解析逻辑   

HttpMessageConveter 接口 提供了对应的数据转换功能

接口中存在的方法如下: 

boolean canRead(Class<?> clazz, MediaType mediaType);
boolean canWrite(Class<?> clazz, MediaType mediaType);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
            throws IOException, HttpMessageNotReadableException;
void write(T t, MediaType contentType, HttpOutputMessage outputMessage)
            throws IOException, HttpMessageNotWritableException;

通过调用实现类中,  getSupportedMediaTypes() 方法, 获取支持的 MediaType列表 

MediaType对象中初始化了支持的报文和类型列表.

 

在抽象类 AbstractHttpMessageConverter 中调用 canRead canWrite 方法判断请求头Content-Type是否包括在所启动服务支持的媒介类型中

spring 针对不同的请求类型.  3.x 和4.x中有不同的实现. 4.x对 jackson进行了增强,并且新增了对Gson的支持 所以会出现 3.x和4.x在对报文转换配置类中有所不同. 

MappingJacksonHttpMessageConverter 例如使用了 jsckson1.x 在3.x中使用

MappingJackson2HttpMessageConverter  使用了 jsckson2.x 在4.x中使用

 

可以在

    <mvc:annotation-driven>  
        <mvc:message-converters>  
            <ref bean="stringHttpMessageConverter" />  
            <ref bean="fastJsonHttpMessageConverter" />  
            <ref bean="marshallingHttpMessageConverter" />  
        </mvc:message-converters>  
    </mvc:annotation-driven> 

中进行配置

或者手动注入具体的 bean.  

	<bean id="mappingJacksonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
				<value>application/json;charset=utf-8</value>
			</list>
		</property>
	</bean>	

 

 常见的媒体格式类型如下:

  •     text/html : HTML格式
  •     text/plain :纯文本格式      
  •     text/xml :  XML格式
  •     image/gif :gif图片格式    
  •     image/jpeg :jpg图片格式 
  •     image/png:png图片格式

   以application开头的媒体格式类型:

  •    application/xhtml+xml :XHTML格式
  •    application/xml     : XML数据格式
  •    application/atom+xml  :Atom XML聚合格式    
  •    application/json    : JSON数据格式
  •    application/pdf       :pdf格式  
  •    application/msword  : Word文档格式
  •    application/octet-stream : 二进制流数据(如常见的文件下载)
  •    application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

   另外一种常见的媒体格式是上传文件之时使用的:

  •     multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

 

针对请求服务端请求415的情况 在客户端使用 服务端已经支持的 content-Type列表中的类型即可解决.  

如果服务端没有支持该类型, 常见排查方式的例如 :

查看服务端是否拥有对该类协议的依赖包 , 是否启用 spring对解析方式的依赖或者在 

mvc:annotation-driven中指定第三方对spring的依赖包 如: 阿里的 fastjson

如果一切正常, 415错误会变成400 或者一步到位直接  200 

对于400错误. 是指客户端发送的请求报文解析后不满足服务端的格式, 对照requestBody类型,与请求报文格式.

over

 

 

 

后记:  写的好蠢, MDZZ !  

 

© 著作权归作者所有

共有 人打赏支持
six_sun
粉丝 0
博文 4
码字总数 29568
作品 0
昌平
程序员
thinkphp http扩展下载方法问题

在用 thinkphp 做了一个文件下载的小程序,遇到一个问题,现在下载 txt,bat,exe类型文件(我只测试了这三种类型的文件),浏览器都是直接显示里面的内容了,而不是出现下载,下载方法代码如下...

开源中国总理
2012/09/22
2.2K
2
play2.0文档-面向java开发者(3)

Manipulating the response 处理应答 Changing the default Content-Type 改变默认内容类型 The result content type is automatically inferred from the Java value you specify as body.......

老盖
2012/04/09
0
0
spring框架 Request请求 content-Type设置和配置

1. Content-Type MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。 常见的媒体格式类型如下:...

ybyron
2017/08/16
0
0
play2.0文档-面向java开发者(5)

Body parsers Body解析器 What is a body parser? body解析器是啥? An HTTP request (at least for those using the POST and PUT operations) contains a body. This body can be formatt......

老盖
2012/04/10
0
0
selenium2-python17-下载文件

webdriver 允许我们设置默认的文件下载路径。也就是说文件会自动下载并且存在设置的那个目录 中。 要想下载文件,首选要先确定你所要下载的文件的类型。要识别自动文件的下载类型可以使用 cu...

丰_申
2016/02/08
3
0

没有更多内容

加载失败,请刷新页面

加载更多

Java中的移位运算符

国庆给自己放了个小长期二十几天,回来继续更新专栏 上一篇文章我们说了Java里的二进制,知道了计算机是以0和1来处理数据的,在阅读源码的过程中,经常会看到这些符号<< ,>>,>>>,这些符号...

SuShine
20分钟前
2
0
linux版QQ

下载地址在这 http://yun.tzmm.com.cn/index.php/s/XRbfi6aOIjv5gwj Appimage包不用做什么别的处理,安装啥的都不需要。。找到文件所在目录,终端中修改一下文件的权限 chmod 777 QQ-2017112...

悲催的古灵武士
25分钟前
1
0
咕泡-MyBatis 实用篇作业

1. Mapper在spring管理下其实是单例,为什么可以是一个单例? 首先,mapper 内部不包含 成员字段,无状态单例是安全的 另外,一直存在不用每次调用都new 一个新实例 2. MyBatis在Spring集成下...

职业搬砖20年
28分钟前
2
0
MQTT协议的初浅认识之连接建立

MQTT百科 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布...

亚林瓜子
45分钟前
1
0
OpenStack部署都有哪些方式

对于每一个刚接触到OpenStack的新人而言,安装无疑是最困难的,同时这也客观上提高了大家学习OpenStack云计算的技术门槛。想一想,自己3年前网上偶然接触到OpenStack时,一头茫然,手动搭建一...

tututu_jiang
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部