Spring MVC 注解@ResponseBody或流获取http请求body的json字符串
1.除了Spring必需要的包以及支持spring注解外 jackson-annotations-2.6.0-xh.jar jackson-core-2.6.0-xh.jar jackson-databind-2.6.0-xh.jar jackson-mapper-asl-1.8.5.jar jackson-jr-all-2.4.3-xh.jar
注意有些jar包版本必须要一样 我就是遇到版本不匹配用的jackson-databind-2.7.0.jar 其他的一样 就一直报错
2.请求必须严格控制 Content-Typeapplication/json 这个不设置好会很难受 找不到错误原因
我使用的是postman测试工具 只是方便测试 你也可以在自己的页面调用 但是要数据格式为json
在body定义要传到后台的json数据
点击sending后 Eclipse debug发现请求到后台
1.方法体直接获取Json数据 Signjson 当然要在方法内添加注解 其中signRequest为获取请求的herder的Authorization值 可以用于验证
最后得到请求的数据json格式封装包含在HTTP消息体的数据了
json参数:{"id":1,"name":"baba市","code":"131081000000","parentId":0,"level":1,"action":1}获取签名:7ce2cb2af9198a76d395774a54b4bc70c5610320
完成了
@RequestMapping 返回值通常解析为跳转路径
@Responsebody 返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。例如,异步获取 json 数据,加上 @Responsebody 注解后,就会直接返回 json 数据。
@RequestBody 注解则是将 HTTP 请求正文插入方法中,直接获取请求消息体的json内容
二、由于有时候签名验证需要将获取的Json放入算法生成签名,但经过测试发现,当请求的某一参数为“money”:“0.000”时候,获取的Json为“money”:“0” 虽然数值上不发生变化,但是转为Json它会自动缺省小数点后的0 测试 当参数为0.001 不变化 所以可能是Json在不影响参数值精度下慧缺省 这时候签名就会与请求方生成的签名不一致,处理方法是:
使用流留获取参数: 代码如下
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF8"));
StringBuffer buff=new StringBuffer();
String line="";
while ((line = reader.readLine()) != null) {
buff.append(line);
}
String SignRequestString = buff.toString();
SignRequestString 就是请求过来的参数,拿去做签名生成 OK 不需要注解是呢么的 且和注解不共存