HTTP内容类型 Content-Type

 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对象中初始化了支持的报文和类型列表.

213602_Fg8D_3674060.png

 

214819_6x7D_3674060.png

在抽象类 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 !  

 

转载于:https://my.oschina.net/u/3674060/blog/1530357

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值