zoukankan      html  css  js  c++  java
  • 深入理解Spring系列之十一:SpringMVC-@RequestBody接收json数据报415

    转载 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());
    	}
    
    }
    
  • 相关阅读:
    Hibernate unsaved-value 属性
    ResulsetHandler九个实现类
    Introspector内省和反射的区别.
    数据库表、字段命名规范
    Linux 时间同步 ntpdate
    http升级https改造方案
    org.apache.tomcat.util.net.NioEndpoint,打开的文件过多
    kafka常用命令
    elasticsearch.yml 配置说明
    getDate() 各种时间格式
  • 原文地址:https://www.cnblogs.com/zhangjianbin/p/9119321.html
Copyright © 2011-2022 走看看