zoukankan      html  css  js  c++  java
  • 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()转换。

  • 相关阅读:
    超级迷宫我的计划表
    不敢死队
    Let the Balloon Rise
    Hangover
    汉诺塔系列2
    Tri Tiling(递推)
    Tiling(递推,高精度)
    Color Me Less
    I Think I Need a Houseboat(圆计算)
    Kbased Numbers(递推)
  • 原文地址:https://www.cnblogs.com/ginponson/p/4694371.html
Copyright © 2011-2022 走看看