上一篇文章介绍了 springmvc 的 get 请求参数可以是一个自定的对象. 那么如何限制这个对象里的参数是否必传呢?
方法一: 在代码逻辑里取出对象里的这个值, 手动进行判断
方法二: 使用 @Valid 注解, 在接口请求的时候让 Spring 自己进行判断
比较
如果用上面两个方法进行非空判断, 当参数传的是空的时候,
方法一的返回结果的状态是 200, 方法二的返回结果状态是 400;
方法一需要自定义返回结果并且可以直接在页面中进行展示, 方法二的返回结果需要从 Response Body 中获取.
方法一复杂, 方法二简单.
所以这两种方法的适用场景是不同的, 如果要在页面输出, 应该使用方法一, 如果只是接口之间调用, 那么使用方法二就可以了
如何使用 @Valid 注解
比如请求:
public String login(@Valid User user) {...}
User.java 如下:
- import org.hibernate.validator.constraints.Length;
- import javax.validation.constraints.NotBlank;
- /**
- * @author jiashubing
- * @since 2019/1/9
- */
- public class User {
- @NotBlank(
- message = "姓名不能为空"
- )
- @Length(
- message = "姓名最长为 20 个字符"
- , min = 1
- , max = 20
- )
- private String name;
- @NotBlank(
- message = "密码不能为空"
- )
- @Length(
- message = "密码最少为 8 个字符, 最长为 30 个字符"
- , min = 8
- , max = 30
- )
- private String password;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
以下转自: http://blog.51cto.com/825272560/2121519
@Valid 注解可以实现数据的验证, 你可以定义实体, 在实体的属性上添加校验规则, 而在 API 接收数据时添加 @valid 关键字, 这时你的实体将会开启一个校验的功能.
@Valid 注解类型
@Null
限制只能为 null
@NotNull
限制必须不为 null
@AssertFalse
限制必须为 false
@AssertTrue
限制必须为 true
@DecimalMax(value)
限制必须为一个不大于指定值的数字
@DecimalMin(value)
限制必须为一个不小于指定值的数字
@Digits(integer,fraction)
限制必须为一个小数, 且整数部分的位数不能超过 integer, 小数部分的位数不能超过 fraction
@Future
限制必须是一个将来的日期
@Max(value)
限制必须为一个不大于指定值的数字
@Min(value)
限制必须为一个不小于指定值的数字
@Past
限制必须是一个过去的日期
@Pattern(value)
限制必须符合指定的正则表达式
@Size(max,min)
限制字符长度必须在 min 到 max 之间
@Past
验证注解的元素值 (日期类型) 比当前时间早
@NotEmpty
验证注解的元素值不为 null 且不为空 (字符串长度不为 0, 集合大小不为 0)
@NotBlank
验证注解的元素值不为空 (不为 null, 去除首位空格后长度为 0), 不同于 @NotEmpty,@NotBlank 只应用于字符串且在比较时会去除字符串的空格
验证注解的元素值是 Email, 也可以通过正则表达式和 flag 指定自定义的 email 格式
注意, 不要错用了异常类型, 比如在 int 上不可用 @size
来源: http://www.bubuko.com/infodetail-2914064.html