老实说对springmvc的基础很差,一直没有好好学,公司都是直接派任务出来就得赶,最近写了个接口,发现接收json的时候英文没事,一到了中文就异常了。下面上码:
DEBUG o.s.w.s.m.a.AnnotationMethodHandlerExceptionResolver - Resolving exception from handler [org.gtjd.action.foreground.WebScienceInterface@457b0c]: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Invalid UTF-8 middle byte 0xd0,这是控制台的log。
at [Source: org.apache.catalina.connector.CoyoteInputStream@c302a0; line: 1, column: 25]; nested exception is org.codehaus.jackson.JsonParseException: Invalid UTF-8 middle byte 0xd0
at [Source: org.apache.catalina.connector.CoyoteInputStream@c302a0; line: 1, column: 25]
@RequestMapping(value="/u_member",method=RequestMethod.POST,produces={"application/json;charset=UTF-8"}),这是rest的路径,以及对应的方法。
public @ResponseBody Map<String,Object> uploadMember(HttpServletRequest request, HttpServletResponse response,@RequestBody Member member)
<bean id="jsonConverter",这个是springmvc的配置。
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;UTF-8</value>
<value>text/json</value>
<value>text/plain</value>
<value>text/html</value>
</list>
</property>
<property name="objectMapper">
<bean class="org.gtjd.common.springmvc.CustObjectMapper"/>
</property>
</bean>
没多少分,还请各位大神帮帮忙,当程序猿的信心都快没了。
------解决思路----------------------
springmvc要编码设置的 你看看web.xml里面有么
<!-- 编码设置-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
------解决思路----------------------
应该是乱码造成了spring无法正常解析吧。先保证你接受到得对象里没有中文乱码。
------解决思路----------------------
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
springmvc配置文件里面加了这个吗
------解决思路----------------------
我用的是Jersey,但是我判断你发现你rest路径只配置了produce,没有配consume
@RequestMapping(value="/testMsgConverter",consumes="application/json;charset=UTF-8",produces="application/json;charset=UTF-8")
------解决思路----------------------
web.xml
<servlet>
<servlet-name>JAX-RS REST Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS REST Servlet</servlet-name>
<url-pattern>/jaxrs/*</url-pattern>
</servlet-mapping>
java:
@Path("/ApSyncRestAPI")
public class ApSyncRestAPI {}供参考