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 !