本来项目中的springmvc已配置好的,没有问题,但是今天突然有个需求,需要写一个接口接收json字符串自动转换为List对象,查了一下用@RequestBody就可以,但是我改了以后,调用接口就报415异常,于是继续百度,很多解决方都是修改pom.xml文件添加如下代码:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.8.1</version>
</dependency></span>
但是,我的项目没有使用maven,所以没有pom.xml文件,所以解决不了我的问题。最后看到一个解决方法,于是做了以下修改:
找到web.xml中springmvc的配置,classpath对应的文件,如下:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
sevlet-context.xml中我原来的配置是这样的:
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
修改成如下代码:
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
修改后启动服务器异常:
java.lang.ClassNotFoundException: org.codehaus.jackson.map.ObjectMapper
查了一下说是缺失jackson的jar包,json字符串和java对象转化必须要有jackson-core-asl、jackson-mapper-asl的jar包,我项目的中原有的jackson包只有jackson-annotations、jackson-core、jackson-databind,把缺失的jackson-core-asl、jackson-mapper-asl的jar包加到项目中以后,服务正常启动了。
这样改完以后,调接口发现返回的json字符串自动加了双引号,不能用json解析了。
经查,是springMVC中使用@ResponseBody注解时会强制返回json格式,在返回字符串时会默认加上双引号。所以要这样改
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
但是,我调接口传了json数组的字符串以后,接口中的List并没有转换成对象,List中是Map对象,又查了一下,将List<User>改为User[]数组就可以了,具体原因不清楚。。
参考链接
http://xiaoyaozjl.iteye.com/blog/1468600
https://www.cnblogs.com/cainiao-Shun666/p/6557618.html
http://blog.csdn.net/lutinghuan/article/details/46820023
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)