转载 https://mp.weixin.qq.com/s/beRttZyxM3IBJJSXsLzh5g

问题原因

报错原因可能有两种情况:

  1. 请求头中没有设置Content-Type参数,或Content-Type参数值不是application/json
  2. 请求头中正确设置了Content-Type参数及参数值,但是在项目jar依赖中(pom.xml或build.gradle)没有添加处理json字符串的处理类,如果SpringMVC框架在启动的时候,检查com.fasterxml.jackson.databind.ObjectMapper和com.fasterxml.jackson.core.JsonGenerator有一个不存在或不能加载,则不会注册MappingJackson2HttpMessageConverter,这个类使用Jackson将json请求参数转成相应的方法参数;同样检查com.google.gson.Gson,如果不存在或不能加载,则不会注册GsonHttpMessageConverter,这个类使用Gson将json请求参数转成相应的方法参数;如果依赖的Jackson和Gson都没有被添加或不能加载,则SpringMVC将找不到对应的参数处理类。

源码分析

在使用SpringMVC的时候,都会添加<mvc:annotation-driven />注解,这个注解下有很多可以配置的扩展参数,有兴趣的可以研究一下。有这个注解,就必定有对应的注解解析,查看 NamespaceHandler 接口的实现类,发现有一个MvcNamespaceHandler。

public class MvcNamespaceHandler extends NamespaceHandlerSupport {

	@Override
public void init() {
// annotation-driven 标签对应的解析类是 AnnotationDrivenBeanDefinitionParser
registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
registerBeanDefinitionParser("default-servlet-handler", new DefaultServletHandlerBeanDefinitionParser());
registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());
registerBeanDefinitionParser("resources", new ResourcesBeanDefinitionParser());
registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser());
registerBeanDefinitionParser("redirect-view-controller", new ViewControllerBeanDefinitionParser());
registerBeanDefinitionParser("status-controller", new ViewControllerBeanDefinitionParser());
registerBeanDefinitionParser("view-resolvers", new ViewResolversBeanDefinitionParser());
registerBeanDefinitionParser("tiles-configurer", new TilesConfigurerBeanDefinitionParser());
registerBeanDefinitionParser("freemarker-configurer", new FreeMarkerConfigurerBeanDefinitionParser());
registerBeanDefinitionParser("velocity-configurer", new VelocityConfigurerBeanDefinitionParser());
registerBeanDefinitionParser("groovy-configurer", new GroovyMarkupConfigurerBeanDefinitionParser());
registerBeanDefinitionParser("script-template-configurer", new ScriptTemplateConfigurerBeanDefinitionParser());
registerBeanDefinitionParser("cors", new CorsBeanDefinitionParser());
} }

最新文章

  1. Ionic2系列——Ionic 2 Guide 官方文档中文版
  2. js cookie
  3. 一起来做webgame,《Javascript蜘蛛纸牌》
  4. C4.5学习及源码阅读
  5. 自己写一个java.lang.reflect.Proxy代理的实现
  6. Spring XML配置文件示例(二)——web.xml
  7. 安卓虚拟机启动失败intel haxm未安装
  8. mysql(转)
  9. 基于新唐M0的XXTEA加密解密算法源码
  10. hdu 5562 Clarke and food(贪心)
  11. xml总结图--(来自传智播客视频资料)
  12. As3.0 视频缓冲、下载总结
  13. Nginx + ngx_lua安装测试【CentOs下】
  14. C#委托基础学习
  15. HDU 1162 Eddy&#39;s picture (最小生成树)(java版)
  16. FastJson、Jackson、Gson进行Java对象转换Json细节处理
  17. Java 学习 UUID 与 时间格式化、时间操作
  18. 给uniGUI的表格控件uniDBGrid加上记录序号的列
  19. gcd(欧几里得算法)
  20. winf

热门文章

  1. mysql 数据类型 及 常用命令
  2. ADO之connection
  3. js get selected text
  4. tooltips &amp; click copy
  5. ORZ hzwer——OI省选算法汇总
  6. 【刷题】BZOJ 1195 [HNOI2006]最短母串
  7. makefile使用笔记(二)变量
  8. OD常见指令和快捷键
  9. TCP ------ 抓包分析(seq ack)
  10. crontab 自动执行脚本