@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了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM