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数据


扫描二维码关注公众号,回复: 137041 查看本文章

点击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 不需要注解是呢么的 且和注解不共存



      





猜你喜欢

转载自blog.csdn.net/qq_35180232/article/details/78053057
今日推荐