springMVC的@ResponseBody、@RequestBody使用需要注意的地方

不打扰是莪最后的温柔 提交于 2020-03-04 21:54:31

springMVC我觉得比struts2好的其中一个原因就是可以使用注解解析json数据,方便快捷。但是,即使如此,还是有需要注意的地方。

1、返回的地方设置@ResponseBody,请求的对象参数@RequestBody,单个参数不用加@RequestBody;

  @RequestMapping(value="/validation")
    public @ResponseBody String validation(String username) throws Exception{      return username;
    }

2、如果要返回的是一个对象,那么直接返回,spring会自动转为json数据。

 @RequestMapping(value="/validation")
    public @ResponseBody User validation(String username) throws Exception{     User u = new User(username);
        return u;
    }

3、如果传过来的是一个json字符串,可以用对象封装起来,使用@RequestBody会帮我们将json转为对应的对象。

@RequestMapping(value="/validation")
public String validation(@RequestBody User user)throws Exception{             return "index";
 }

 

注意:

1、单个参数的情况

a)、单个参数不要用@RequestBody,可以用@RequestParam。

错误的情况:GET:出现400参数不合法或POST:出现username=a,key和value一起传到参数中

  @RequestMapping(value="/validation")
    public String validation(@RequestParam("name") String username) throws Exception{           return "index";
    }

 b)、单个参数不要加'contentType' : 'application/json'。contentType: 'application/json', 这句去掉,这句是描述请求包内容格式的,你应该采用默认的application/x-www-form-urlencoded才能正确被服务器解析。

错误的情况:使用@RequestParam出现400错误;使用@RequestBody出现key和value一起传到参数中

 

 2、如果是@RequestBody整个对象的话,那么就要加'contentType' : 'application/json'。不加的话,可能会出现406Not Acceptable

  $('#username').blur(function(){
        var postdata = '{"username":"' + $('#username').val() + '","password":"' + $('#password').val() + '"}';
                $.ajax({
                    url:"validation",
                    type:"post",
                    cache:false,            contentType: 'application/json',
                    data:postdata,
                    dataType:'json',
                    success:function(result){
                    }
                });
    }); 

3、如果使用springMVC并使用ajax添加了 'contentType' : 'application/json'后,data必须为一个严格json字符串,可以用JSON.stringify()转换。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!