前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >@ModelAttribute和@RequestBody注解

@ModelAttribute和@RequestBody注解

作者头像
一觉睡到小时候
发布2019-07-16 17:03:21
2.1K0
发布2019-07-16 17:03:21
举报
文章被收录于专栏:国产程序员国产程序员

@RequestBody

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

js代码

代码语言:javascript
复制
<script type="text/javascript">  
    $(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){ 

            } 
         }); 
    });
代码语言:javascript
复制
java代码 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) 
    @ResponseBody  
    public void saveUser(@RequestBody List<User> users) { 
         userService.batchSave(users); 
    }
代码语言:javascript
复制
@ModelAttribute使用在方法上时,每次调用这个类中的action时,都会先执行这个方法
使用在无返回类型方法上时@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";  
    }  

}
代码语言:javascript
复制
每次调用/helloWorld时都会先执行populateModel方法,并把前台abc 设置到attributeName 属性中,然后再调用helloWorld方法,前台页面可以直接都去attributeName的值使用在有返回类型的方法上时@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类型就设置modelkeyuser,value 为返回值.然后执行helloworld方法,前台可以直接通过${user.accout}获取值

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

代码语言:javascript
复制
使用在方法参数上@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相应属性
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 国产程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @RequestBody
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档