springmvc中直接在Resposboday中处理数据的异常解决方法
来源:互联网 发布:查淘宝宝贝隐形降权 编辑:程序博客网 时间:2024/05/22 12:58
前面提到过在把数据库的数据转成JSON回传到应用界面时产生的中文乱码和特殊字符的处理方法,这里在从安卓的客户端上传JSON数据到服务端时,也发现了一些异常情况。
首先,在传送JSON到数据库时,服务端是这么做的:
@RequestMapping("/setIrisData/{data}")public ResponseEntity<String> setIrisData(@PathVariable String data){ //解析并添充数据 String jsonstr = DoWithIrisData(data); HttpHeaders headers = new HttpHeaders() ; headers.setContentType(MediaType.TEXT_PLAIN); return new ResponseEntity<String>(jsonstr,headers,HttpStatus.OK);}@RequestMapping(value ="/setIrisDataPost",method= RequestMethod.POST)public ResponseEntity<String> setIrisDataPost(@RequestBody PersonBase
data)
{
//解析并添充数据
int num = idService.insertSelective(data);
HttpHeaders headers = newHttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
//return new ResponseEntity<PersonBase>(pb,headers,HttpStatus.OK)
String s = JSON.toJSONString(num);
return new ResponseEntity<String>(s,headers,HttpStatus.OK);
}
有两种情况,一种是Get,一种是POST,但是大家都知道Get方式在传送数据时会有一些长度的限制,比如有的说是1024个字节,有的说是2883个字节,反正总归是有的。查了资料说其实Get本身的协议是没有限制的,有限制的是实现这个协议的浏览器软件。不同的浏览器有不同的长度限制。
所以只好又实现一个POST版本,如上所述,它的协议里是没有限制大小的,但是实际实现起来,在服务端的TOMCAT和相关的软件还是多少有限制的。默认是2M的大小。
可是这个在简单的测试中发现是正确的,但是当把数据POJO的BASE64字符串添满后,首先是Get的长度不够了。
换成POST后,发现报一些异常“org.codehaus.jackson.JsonParseException: Illegal unquoted character((CTRL-CHAR, code 10)): has to be escaped using backslash to be included instring value”。还是怀疑是springmvc的原因,但是已经在上文中配置了,上传的配置不知道怎么配置啊。
另外在使用fiddler2在模拟发送数据的时候儿,发现使用的字符串发送中如果有空格也报一些错误。网上有解决办法:
public static <T> T jsonToEntity(String json, Class<T>clazz) throws IOException {
ObjectMapper mapper = new ObjectMapper();
// 允许反斜杆等字符
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS,true);
return mapper.readValue(json, clazz);
}
但是在使用后发现,所有的字符串转换都是空,也就是说,异常没有报,但数据转换全是错的,咋办?
凉拌呗!试了好多次都解决不了问题,后来冷静下来想了下,查看一下发送的数据,里面有大量的“/”字符。估计是它导致的。又去查BASE64发现人家就必须得有这玩意儿。那好吧,还是从网上测试一下,在百度搜了几个测试JSON的在线网站,把传送的数据放到上面,都非常妥妥的解析了出来。
既然这样,肯定没啥特殊的,否则照样别人也是解析不出来的。在接的@RequestBody参数中不再使用POJO对象,不让SPRINGMVC自动转换而是自己接收JSON自己转换:
@RequestMapping(value ="/setIrisDataPost",method= RequestMethod.POST)public ResponseEntity<String> setIrisDataPost(@RequestBody String data){ //解析并添充数据 IrisData iData = JSON.parseObject(data,IrisData.class); int num = idService.insertSelective(iData); HttpHeaders headers = new HttpHeaders() ; headers.setContentType(MediaType.TEXT_PLAIN); //return new ResponseEntity<PersonBase>(pb,headers, HttpStatus.OK) String s = JSON.toJSONString(num); return new ResponseEntity<String>(s,headers,HttpStatus.OK);}
发现直接就转换好了。也是醉了一次又一次。
慢慢来吧。
- springmvc中直接在Resposboday中处理数据的异常解决方法
- 在springMVC中使用自定义的异常处理
- springmvc中异常处理
- SpringMvc 中全局异常处理
- springmvc 异常001---在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案
- SpringMVC中处理json数据
- Springmvc中异常处理的三种方式
- 在单元测试中对异常的处理
- 在MVC中处理异常的总结
- PopupWindow在onCreate()中直接show的异常
- 无法直接在IE中打开PDF文件的解决方法
- 在ASP.NET_2.0中操作数据.在ASP.NET页面中处理BLL.DAL层的异常
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常
- 直接在DataGridView中添加修改数据的问题
- springMVC拦截器、json转换器、统一异常处理在配置文件中配置
- 在使用SSH过程中,在JSP页面中对数据进行处理,出异常!
- SpringMVC框架在Controller中对于Session的处理
- 下拉菜单和文本框结合
- 信息安全工程师 学习笔记(二十四)
- LoadRunner windows64位安装教程
- 一款应用ANR的分析思路总结
- python:_csv.Error: line contains NULL byte错误
- springmvc中直接在Resposboday中处理数据的异常解决方法
- PAT甲级1006
- 初识 Servlet
- 完全卸载oracle11g步骤
- Mysql、SQL Developer、maven、java的使用
- Retrofit 源码分析
- 如何恢复VS2015的热键
- C++后台开发STL之vector类2017/5/15
- JavaScript技巧