Spring MVC 使用fastjson做序列化反序列化时处理带有反斜杠’'等特殊字符的处理
一次在Spring mvc中引入 fastjson作为JSON解析工具类的时候,在接收含有特殊字符的JSON串时遇到了如下异常
com.zhht.pps.controller.TobPpsOrderController.add() 参数: {
"k" : "b38c04e4-6776-460c-8ff2-1c50b3cf872b",
"data" : "{\n \"orderMoney\" : \"6\",\n \"carId\" : \"5d012c0d_bf82_11e7_8e04_6c92bf31522f\",\n \"items\" : \"[\\n {\\n \\\"buyDate\\\" : \\\"2017-11-29\\\",\\n \\\"endTime\\\" : \\\"16:40\\\",\\n \\\"beginTime\\\" : \\\"14:00\\\",\\n \\\"price\\\" : \\\"3.00\\\",\\n \\\"ppsType\\\" : \\\"0\\\"\\n },\\n {\\n \\\"buyDate\\\" : \\\"2017-11-30\\\",\\n \\\"endTime\\\" : \\\"16:40\\\",\\n \\\"beginTime\\\" : \\\"14:00\\\",\\n \\\"price\\\" : \\\"3.00\\\",\\n \\\"ppsType\\\" : \\\"0\\\"\\n }\\n]\",\n \"plateNumber\" : \"京FHHYHHY\",\n \"ppsType\" : \"0\",\n \"parkId\" : \"5770a654_4fde_11e6_bd3c_2880239dce10\"\n}"
}
2017-11-27 17:22:27.146 [e8302f76-58c3-428e-a1a8-0a1f986f8548] [ERROR] TobPpsOrderController {TobPpsOrderController.java:102} - syntax error, expect {, actual string, pos 0, fastjson-version 1.2.41
com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 0, fastjson-version 1.2.41
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:451)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:271)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:267)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:640)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:365)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:333)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:247)
搜索了很多帖子都是在JSON串上做文章,通过json.repalce()的方式来替换特殊字符以达到正确解析目的的,但是一旦类似地方太多,产生大量重复代码,于是采用了修改Spring mvc配置的方式解决
关键配置如下:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
<bean
class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
希望能够帮到遇到相同问题的朋友!