zoukankan      html  css  js  c++  java
  • @RequestBody和@ModelAttribute注解

    一 、@RequestBody

     @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.

        $(document).ready(function(){  
            var saveDataAry=[];  
            var data1={"userName":"test","address":"gz"};  
            var data2={"userName":"ququ","address":"gr"};  
            saveDataAry.push(data1);  
            saveDataAry.push(data2);         
            $.ajax({ 
                type:"POST", 
                url:"user/saveUser", 
                dataType:"json",      
                contentType:"application/json",               
                data:JSON.stringify(saveData), 
                success:function(data){ 
                                           
                } 
             }); 
        });  
     @RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) 
        @ResponseBody  
        public void saveUser(@RequestBody List<User> users) { 
             userService.batchSave(users); 
        } 

    二 、@ModelAttribute

    1.使用在方法参数上

    用于接收key,value形式参数

    此方法会先从model去获取key为"user"的对象,如果获取不到会通过反射实例化一个User对象,再从request里面拿值set到这个对象,然后把这个User对象添加到model(其中key为"user").

    @Controller
    public class Hello2ModelController extends BaseController {
        
        @RequestMapping(value = "/helloWorld2")  
        public String helloWorld(@ModelAttribute("myUser") User user) {
            user.setName("老王");
           return "helloWorld";  
        }  
    }

    model中key为myUser ,前台可以直接通过${myUser.xx}获取user相应属性

    2. 使用在方法上

    2.1   使用在无返回类型方法上时

    @Controller
    public class HelloModelController {
        
        @ModelAttribute 
        public void populateModel(@RequestParam String abc, Model model) {  
           model.addAttribute("attributeName", abc);  
        }  
    
        @RequestMapping(value = "/helloWorld")  
        public String helloWorld() {  
           return "helloWorld";  
        }  
    
    }

       每次调用/helloWorld时都会先执行populateModel方法,并把前台abc 设置到attributeName 属性中,然后再调用helloWorld方法,前台页面可以直接都去attributeName的值

    2.2    使用在有返回类型的方法上时

    @Controller
    public class Hello2ModelController {
        
        @ModelAttribute 
        public User populateModel() {  
           User user=new User();
           user.setAccount("ray");
           return user;
        }  
        @RequestMapping(value = "/helloWorld2")  
        public String helloWorld() {  
           return "helloWorld";  
        }  
    }

     首先执行populateModel方法,并默认 根据返回类型设置model 的属性,比如User类型就设置model的key为user,value为返回值.然后执行helloworld方法,前台可以直接通过${user.accout}获取值,

     以上两种方法都也可以指定ModelAttribute(value="useraaaa")或者ModelAttribute("useraaaa")这样的话加入model中的key就是useraaa了.

  • 相关阅读:
    CVS使用经验谈(zz from chinaunix.net)
    登黄山
    登黄山之二
    Dennis Ritchie 去世
    观迎客松
    从程序员角度看ELF
    再次回到这里
    异步时钟下跨时钟域信号处理
    Fedora14下的Novas和Synopsys
    Oralce导入\导出
  • 原文地址:https://www.cnblogs.com/thiaoqueen/p/7400353.html
Copyright © 2011-2022 走看看