常用的校验注解:
@Null 被注释的元素必须为null @NotNull 被注释的元素不能为null @AssertTrue 该字段只能为true @AssertFalse 该字段的值只能为false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin("value") 被注释的元素必须是一个数字,验证小数的最小值 @DecimalMax("value") 被注释的元素必须是一个数字,验证小数的最大值 @Size(max,min) 查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等 @Digits(integer,fraction) 检查是否是一种数字的整数、分数,小数位数的数字 @Past 被注释的元素必须是一个过去的日期 @Future 被注释的元素必须是一个将来的日期 @Pattern(regexp = "[abc]") 被注释的元素必须符合指定的正则表达式。 @Email 被注释的元素必须是电子邮件地址 @Length(max=5,min=1,message="长度在1~5") 检查所属的字段的长度是否在min和max之间,只能用于字符串 @NotEmpty 被注释的字符串必须非空 @Range 被注释的元素必须在合适的范围内 @CreditCardNumber 对信用卡号进行一个大致的验证 @NotBlank 不能为空,检查时会将空格忽略 @NotEmpty 不能为空,这里的空是指空字符串
封装返回值状态码枚举:
package com.example.validation.config; import lombok.Getter; @Getter public enum ResultCode { SUCCESS(200, "请求成功"), FAILED(400, "请求失败"), VALIDATE_ERROR(410, "参数校验失败"); private int code; private String msg; ResultCode(int code, String msg) { this.code = code; this.msg = msg; } }
封装返回值实体:
package com.example.validation.config; import lombok.Data; @Data //@Data相当于@Getter和@Setter public class ResultVo { // 状态码 private int code; // 状态信息 private String msg; // 返回对象 private Object data; // 手动设置返回vo public ResultVo(int code, String msg, Object data) { this.code = code; this.msg = msg; this.data = data; } // 默认返回成功状态码,数据对象 public ResultVo(Object data) { this.code = ResultCode.SUCCESS.getCode(); this.msg = ResultCode.SUCCESS.getMsg(); this.data = data; } // 返回指定状态码,数据对象 public ResultVo(ResultCode statusCode, Object data) { this.code = statusCode.getCode(); this.msg = statusCode.getMsg(); this.data = data; } // 只返回状态码 public ResultVo(ResultCode statusCode) { this.code = statusCode.getCode(); this.msg = statusCode.getMsg(); this.data = null; } }
封装用户实体并添加校验:
package com.example.validation.entity; import lombok.Data; import lombok.ToString; import javax.validation.constraints.*; @ToString @Data public class User { @NotEmpty(message = "用户名不能为空") private String userName; @NotBlank(message = "密码不能为Null") private String password; @Max(value = 100, message = "年龄不能超过100") @Min(value = 1, message = "年龄不能小于1") private int age; }
新建controller:
package com.example.validation.controller; import com.example.validation.config.ResultCode; import com.example.validation.config.ResultVo; import com.example.validation.entity.User; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; @RestController @RequestMapping("/user") public class Test { @GetMapping("/test001") public Object test001(@Valid User user, BindingResult bindingResult){ //这里用我试了试@Valid和@Validated都行 if(bindingResult.hasErrors()){//获取校验失败信息 return return new ResultVo(ResultCode.VALIDATE_ERROR, bindingResult.getFieldError().getDefaultMessage());
} return new ResultVo(ResultCode.SUCCESS, user); } }
每个请求都写一遍校验不太友好,添加统一校验:
package com.example.validation.config; import org.springframework.validation.BindException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class ControllerAdvice { @ExceptionHandler({BindException.class}) public Object MethodArgumentValidException(BindException bindException) { // 从异常对象中拿到ObjectError对象 String err = bindException.getFieldError().getDefaultMessage(); return new ResultVo(ResultCode.VALIDATE_ERROR, err); } }
之后controller就不用重复的获取校验失败信息了:
package com.example.validation.controller; import com.example.validation.config.ResultCode; import com.example.validation.config.ResultVo; import com.example.validation.entity.User; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; @RestController @RequestMapping("/user") public class Test { @GetMapping("/test002") public Object test002(@Valid User user){ return new ResultVo(ResultCode.SUCCESS, user); } }
标签:springboot,校验,example,import,ResultCode,validation,com,public From: https://www.cnblogs.com/wscw/p/17111346.html