老实说对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的配置。 |
|
15分 |
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> |
10分 |
应该是乱码造成了spring无法正常解析吧。先保证你接受到得对象里没有中文乱码。
|
首先感谢!上次也是你帮我解决的~我查了一下web.xml发现没配这个,但是我加了进去还是不行呢,同样的异常 |
|
诶,发请求那方也是用的utf-8编码,发的只是汉字而已,应该不是乱码吧 |
|
把这个filter配在 你的springmvc 拦截器前面 ! |
|
server.xml里面的URIencoding配置成UTF-8试试。
|
|
前端哪里的问题呢,我排查了一遍,配置也齐全了,反正只要出现中文就报异常,无解啊。。我是用restdebugger测试的。跪了! |
|
配了的。。 |
|
页面也是utf8编码么?
|
|
1分 |
<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配置文件里面加了这个吗 |
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> |
|
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> 配了的,因为我要的是json,所以配的application/json;UTF-8 |
|
1分 |
我用的是Jersey,但是我判断你发现你rest路径只配置了produce,没有配consume
@RequestMapping(value="/testMsgConverter",consumes="application/json;charset=UTF-8",produces="application/json;charset=UTF-8") |
把编码什么都删了试试 使用默认的
|
|
看来是无解了,配了还是没用。谢谢! |
|
什么都不配就全乱码了呀- – |
|
1分 |
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 {}供参考 |
自我终结:今天没事将request头打印出来跟jquery ajax提交的文件头对比了一下,发现rest debugger发过来的content-type为application/json,而jq的多了charset=utf-8,问题就在这里。由于客户使用的是Delphi,content-type设置比较麻烦,若采用常用的web编程语言应该不会有这种问题的。PS:5楼的答案总是八九不离十。。不止大神大腿是否还有位置 @sc6231565
|