@Valid常用注解及使用方法
程序员文章站
2024-03-12 20:27:38
...
文章目录
一、@Valid
用途
主要用于表单验证,验证注解是否符合要求,直接加在controller变量之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息.
使用方法
1. 在controller层的方法的要校验的参数上添加@Valid注解
@PostMapping("/addft")
public Response addFt(@RequestBody @Valid FtInfo ftInfo){}
2. 实体类加上参数校验
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RegisterUser {
@Min(value = 1000000)
@NotNull(message = "ID不能为空")
private Long userId;
@NotNull(message = "用户名不能为空")
@Email(message = "邮箱不正确")
private String username;
/**
* 教师职称
*/
private String position;
/**
* 教师所属教研室
*/
private String office;
}
3. 编写全局异常捕捉类
@Slf4j
@RestControllerAdvice
public class ExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
logger.error("param not valid {}", e.getBindingResult().getFieldError().getDefaultMessage());
return Response.error(ResultCode.PARAM_REQUIRED, e.getBindingResult().getFieldError().getDefaultMessage());
}
}
4. Result类
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response<T> {
private Integer code;
private String message;
private T data;
public Response() {
this.code = ResultCode.SUCCESS.getCode();
this.message =ResultCode.SUCCESS.getMessage();
}
/**
* 用于错误处理
* @param code 错误码
* @param message 错误提示信息
*/
public Response(Integer code,String message){
this.code = code;
this.message = message;
}
public static Response<String> error(Integer code,String msg){
return new Response<>(code,msg);
}
}
5.状态枚举类
public enum ResultCode {
SUCCESS(200, "成功"),
/** 300-399是客户端需要做些事 */
LOGIN_REQUIRED(302, "需要重新登录"),
/** 400-499是客户端错误 */
BAD_REQUEST(400, "非法请求"),
UNAUTHORIZED(401, "未授权,请联系管理员"),
FORBIDDEN(403, "该页面禁止访问"), //
NOT_FOUND(404, "页面未找到"), //
LOGIN_FAIL(410, "登录失败"), //
PARAM_REQUIRED(411, "缺少必须参数"),
PARAM_VALIDATION_FAILURE(412, "参数校验失败"),
OPERATION_EXPIRED(413, "超时提交"),
OPERATION_DUPLICATED(414, "重复提交"),
OPERATION_UNSUPPORTED(415, "不支持的操作"),
/** 500-599是服务端错误 */
SERVICE_BUSY(500, "内部系统繁忙"),
SERVICE_ERROR(501, "服务端异常"),
SERVICE_RATE_EXCEEDED(520, "请求超限"),
private final int code;
private final String message;
static {
checkDuplicate(values(), ResultCode::getCode);
}
ResultCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
二、常用注解
限制 | 说明 |
---|---|
@Null | 限制只能为null |
@NotNull | 限制必须不为null,一般用来校验Integer类型不能为空 |
@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),一般用来校验List类型不能为空 |
@NotBlank | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),一般用来校验String类型不能为空,不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 |
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 |
三、@Validated和@Valid区别
@Validated:
(1)可以用在类型、方法和方法参数上,但是不能用在成员属性(字段)上。
(2)提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制
(3)用在方法入参上无法单独提供嵌套验证功能。不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。
@Valid:
(1)可以用在方法、构造函数、方法参数和成员属性(字段)上
(2)用在方法入参上无法单独提供嵌套验证功能。能够用在成员属性(字段)上,提示验证框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。
上一篇: 一些有意思的题目
下一篇: 搭建自己的wordpress博客