当前位置: 代码迷 >> J2EE >> rest接收中文的json数据时报错误,springmvc大神请进
  详细解决方案

rest接收中文的json数据时报错误,springmvc大神请进

热度:43   发布时间:2016-04-17 23:34:27.0
rest接收中文的json数据时报异常,springmvc大神请进~
老实说对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
 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]
,这是控制台的log。
@RequestMapping(value="/u_member",method=RequestMethod.POST,produces={"application/json;charset=UTF-8"})	
public @ResponseBody Map<String,Object> uploadMember(HttpServletRequest request, HttpServletResponse response,@RequestBody Member member)
,这是rest的路径,以及对应的方法。
<bean id="jsonConverter"
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的配置。
没多少分,还请各位大神帮帮忙,当程序猿的信心都快没了。


------解决思路----------------------
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 {}供参考  


  相关解决方案