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

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()转换。

原文地址:https://www.cnblogs.com/ginponson/p/4694371.html