@Valid @ModelAttribute
时间: 2023-10-06 09:14:39 浏览: 45
@Valid @ModelAttribute是Spring MVC中用于对请求参数进行验证的注解。
通过在方法参数上添加@Valid注解,可以告诉Spring MVC在接收到请求参数后进行验证。验证的结果会保存在BindingResult对象中,可以通过该对象获取验证结果和错误信息。
@ModelAttribute注解用于标识一个方法,该方法会在每次执行Controller中的方法之前先执行,并将返回值添加到Model对象中。在示例中的代码中,@ModelAttribute注解的方法top会在执行home方法之前先被调用,并将返回的数据添加到Model对象中,然后再将Model对象传递给home方法。
综合来说,@Valid @ModelAttribute注解的作用是在处理请求时对请求参数进行验证,并将验证结果和错误信息添加到Model对象中。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
相关问题
SpringMVC中,如果要跨请求使用某些数据,那么需要使用@ModelAttribute注解把该数据存储到session域。
@ModelAttribute注解并不是用来将数据存储到session域的,而是用来将请求参数绑定到Model中,或者是提供一些公共的模型属性供所有被@RequestMapping注解的方法共享使用。
如果需要将数据存储到session域中,可以使用HttpSession对象的setAttribute方法。例如:
```java
@RequestMapping("/login")
public String login(HttpSession session, @RequestParam("username") String username) {
// 验证用户名和密码
if (isValid(username, password)) {
session.setAttribute("username", username);
return "redirect:/home";
} else {
return "login";
}
}
```
这样,当用户登录成功时,该用户的用户名就会被存储到session域中,后续的请求都可以通过session.getAttribute("username")来获取该用户的用户名。
java.lang.IllegalStateException: An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply: public org.springframework.http.ResponseEntity com.example.mybatisplusspringboot.controller.UserController.getUserById(java.lang.String,org.springframework.validation.BindingResult)
这个异常是因为你的 Spring MVC 控制器方法中,`BindingResult` 参数不是紧跟在 `@ModelAttribute`、`@RequestBody` 或 `@RequestPart` 参数之后声明的。`BindingResult` 参数必须紧跟在它所对应的数据绑定参数之后声明。
例如,如果你的控制器方法是这样的:
```java
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
public ResponseEntity<User> getUserById(@PathVariable("id") String id, @Valid User user, BindingResult bindingResult) {
// ...
}
```
那么 `BindingResult` 参数就不是紧跟在 `@Valid User user` 参数之后声明的,应该改为这样:
```java
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
public ResponseEntity<User> getUserById(@PathVariable("id") String id, @Valid @ModelAttribute User user, BindingResult bindingResult) {
// ...
}
```
这样就能避免这个异常了。