相关疑难解决方法(0)

354
推荐指数
6
解决办法
36万
查看次数

Spring:带有和不带@ModelAttribute的绑定对象

我是Spring的新手,并注册了一个用户.我确实喜欢这个.

@RequestMapping("/register")
    public String register(@ModelAttribute User user,BindingResult result){
       if(!result.hasErrors()){
         userSerive.register(user);
       }
     return "welcome";
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但这里的问题是我userwelcome.jsp页面中不需要这个对象,所以为什么要让模型对象更重.所以我试过没有@ModelAttribute,这对我来说也适用于下面.

@RequestMapping("/register")
    public String register(User user,BindingResult result){
       if(!result.hasErrors()){
         userSerive.register(user);
       }
     return "welcome";
}
Run Code Online (Sandbox Code Playgroud)

所以我只想知道两者的优点和缺点,如果我真的不需要user对象,那么这是最佳实践jsp.@ModelAttribute做除了增加对象模型的任何其他事情,这春天隐式绑定不does.Is @ModelAttribute结合或者更安全的方法是什么?

我想在以下4种类型的请求中对我的查询进行分类.@ModelAttribute如果我不需要在视图中发送数据并且我的请求是 -

  1. 查询字符串即GET中的表单数据
  2. 请求有效负载或主体,即POST中的表单数据
  3. json数据在ajaxified GET请求中
  4. POST请求中的json数据 - 我想这两者都不会绑定.@RequestBody是必须的.

data-binding spring modelattribute

13
推荐指数
3
解决办法
1万
查看次数

Spring MVC:@RequestBody VS @ModelAttribute

我是否理解正确,为了在 Spring MVC 应用程序中捕获/数据绑定 HTTP 请求的主体,有人可以使用...

@RequestBody

application/json对于编码为?的请求

@PostMapping(consumes = "application/json")
public String handleUpload( @RequestBody UploadCommand command ) {
     // ...   
}
Run Code Online (Sandbox Code Playgroud)

@ModelAttribute

x-www-form-urlencoded对于编码为或multipart/form-data?的请求

@PostMapping(consumes = "multipart/form-data")
public String handleUpload( @ModelAttribute UploadCommand command ) {
     // ...   
}
Run Code Online (Sandbox Code Playgroud)

问题:

为什么Spring需要有这两个不同的注解呢?

这些注释还有其他用例吗?

注意: 经过深入研究:这个 stackoverflow 答案深入阐述了 @ModelAttribute: @ModelAttribute 注释,何时使用它?

data-binding spring annotations spring-mvc

8
推荐指数
1
解决办法
4816
查看次数