Spring框架提供了接口参数校验的注解。下面是相关注解:

看下@Validated注解源码
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Validated {
上面说明作用域:类、方法、参数上。
@Validated作用在方法参数上,就会对这个参数进行注解规则注解的校验:
验证的User内部的注解校验规则
@GetMapping("/testArgsAnno")
@ResponseBody
public void testArgsAnno(@Validated User user){
}
@Data
public class User {
@NotBlank(message = "名字不为空")
@Length(max = 20, message = "账号[accountNo]长度过长")
private String name;
@Alias("注解年龄,使用注解会覆盖排序,会覆盖掉addHeaderAlias设置的同名标题名")
private String age;
@Size(min = 6, max = 20, message = "密码长度必须在6-20之间")
private String password;
@NotBlank(message = "登录类型不允许为空")
@Pattern(regexp = "1|2", message = "登录类型的取值不在指定范围内")
private String loginType;
@Max(value = 10,message = "用户区域不得大于10")
@Min(value = 1,message = "用户区域不得小于0")
private Integer areaId;
@AssertFalse(message = "移动端必须是false,如果是true则报错")
private Boolean isMobile;
@AssertTrue(message = "PC端必须是true,如果是false则报错")
private Boolean isPC;
@Email(message = "必须是邮箱")
private String eamil;
@NotNull(message = "时间不能为空")
@Past(message = "时间必须是过去的时间")
private Date pastTime;
@NotNull(message = "时间不能为空")
@Future(message = "时间必须是未来的时间")
private Date futureTime;
@NotNull(message = "时间不能为空")
@PastOrPresent(message = "校验时间必须是过去或现在的时间")
private Date pastOrPresentTime;
@NotNull(message = "时间不能为空")
@FutureOrPresent(message = "校验时间必须是现在或未来的时间")
private Date futureOrPresentTime;
@NotEmpty(message = "NotEmpty是用来校验集合、Map、数组")
private String[] hello;
@DecimalMin(value = "0.01",inclusive = false,message = "金钱最小必须大于0.01")
@DecimalMax(value = "9999.99",inclusive = true,message = "金钱最大只能到9999.99")
private BigDecimal money;
}
此时如果请求接口,响应信息如下:这不是我们期望的结果!
{
"timestamp": "2022-12-26T10:24:04.056+00:00",
"status": 400,
"error": "Bad Request",
"path": "/abc/efg/testArgsAnno"
}
调整异常响应信息
我们一般在全局异常捕获BindException,这个异常!
@ExceptionHandler({BindException.class})
@ResponseBody
public ResponseEntity BindException(HttpServletRequest req, BindException e) {
logger.error("方法参数验证失败:{}", e.getMessage());
BindingResult bindingResult = e.getBindingResult();
return ResponseEntity.badRequest().body(bindingResult.getFieldError().getDefaultMessage());
}
测试

其他注解
@JsonFormat Jackson包下的时间格式工具
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
private Date date;
特殊说明: 上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤