本文介绍: 实体类参数:参数上必须加上@Valid,类上@Validated可加可不加;非实体的参数:类上必须加上@Validated;推荐都加上,如果类上 @Validated不加,万一后期改造添加新参数,可能会忘记注解@Validated。
1、@Validated和@Valid区别
2、引入依赖
Spring Boot 2.3 1 之前,只需要引用spring-boot-starter-web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring Boot 2.3 1 之后,spring–boot-starter–validation 已经不包括在了 spring–boot-starter-web 中,需要我们手动加上。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
3、示例代码
package com.test.entity;
import javax.validation.constraints.NotBlank;
import lombok.Data;
/**
* 测试实体类
*/
@Data
public class Test {
/**
* 账号
*/
@NotBlank(message = "登陆账号不能为空")
private String username;
/**
* 密码
*/
@NotBlank(message = "密码不能为空")
private String password;
}
package com.test.controller;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.test.entity.Test;
/**
* 测试参数校验
*/
@RestController
@RequestMapping("/test")
@Validated
public class TestController {
@RequestMapping(value = "getId", method = RequestMethod.GET)
public String getId(@NotNull Integer id) {
return "id: "+id;
}
@RequestMapping(value = "save", method = RequestMethod.POST)
public String save(@Valid Test test) {
System.out.println(test.getUsername());
return "success";
}
}
4、验证结果
getId方法
save方法
大家会看到现在的错误提示非常不友好, 我们可以自定义异常返回错误消息
参考文章:SpringBoot注解校验validation自定义异常返回错误消息给前端_自定义校验注解前台如何弹窗提示-CSDN博客
@NotBlank注解String字段会报错_@notblank报错-CSDN博客
4、@Validated和@Valid使用情况测试
/**
* 1.@Validated和@Valid同时使用--结果:验证成功
*/
@RestController
@RequestMapping("/test")
@Validated
public class TestController {
@RequestMapping(value = "getId", method = RequestMethod.GET)
public String getId(@NotNull Integer id) {
return "id: "+id;
}
@RequestMapping(value = "save", method = RequestMethod.POST)
public String save(@Valid Test test) {
System.out.println(test.getUsername());
return "success";
}
}
/**
* 2.@Validated单独使用--结果:getId方法的参数id校验成功,save方法实体校验失效
*/
@RestController
@RequestMapping("/test")
@Validated
public class TestController {
@RequestMapping(value = "getId", method = RequestMethod.GET)
public String getId(@NotNull Integer id) {
return "id: "+id;
}
@RequestMapping(value = "save", method = RequestMethod.POST)
public String save(Test test) {
System.out.println(test.getUsername());
return "success";
}
}
/**
* 3.@Valid单独使用--结果:getId方法的参数id校验失效,save方法实体校验成功
*/
@RestController
@RequestMapping("/test")
public class TestController {
@RequestMapping(value = "getId", method = RequestMethod.GET)
public String getId(@NotNull Integer id) {
return "id: "+id;
}
@RequestMapping(value = "save", method = RequestMethod.POST)
public String save(@Valid Test test) {
System.out.println(test.getUsername());
return "success";
}
}
4.参数id也加上@Valid–结果:getId方法的参数id校验失效,save方法实体校验成功
/**
* 4.参数id也加上@Valid--结果:getId方法的参数id校验失效,save方法实体校验成功
*/
@RestController
@RequestMapping("/test")
public class TestController {
@RequestMapping(value = "getId", method = RequestMethod.GET)
@Validated
public String getId(@Valid @NotNull Integer id) {
return "id: "+id;
}
@RequestMapping(value = "save", method = RequestMethod.POST)
public String save(@Valid Test test) {
System.out.println(test.getUsername());
return "success";
}
}
5、总结
- 实体类参数:参数上必须加上@Valid,类上@Validated可加可不加;
- 非实体的参数:类上必须加上@Validated;
推荐都加上,如果类上 @Validated不加,万一后期改造添加新参数,可能会忘记注解@Validated
原文地址:https://blog.csdn.net/u011974797/article/details/134645241
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_19247.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。