-
POST请求
Spring @Validated注解是@Valid注解的变体,增加groups属性进行分组验证。
- 首先定义一个分组
public interface ModifyRequest {
}
- 在@Validated注解中指定分组
@PostMapping("/modifyResource")
public void modifyResource(@RequestBody @Validated(ModifyRequest.class) AdminResourceReqVo req) {
}
- 在请求实体中的校验注解中指定分组
@Data
public class AdminResourceReqVo {
@NotBlank(message = "资源ID不能为空", groups = ModifyRequest.class)
private Integer resourceId;
}
通过上面3步则可实现条件执行请求对象中的验证。
-
GET请求
GET请求如果需要用校验注解,需要在Controller类上面添加@Validated注解,否则不生效
@RestController
@RequestMapping("/api/admin/role")
@Validated
public class AdminRoleController {
@GetMapping("/getRoleById")
public void getRoleById(@RequestParam @NotNull(message = "角色ID不能为空") Integer roleId) {
}
}
其实也不是完全是GET和POST这样区别,也可以说是URL变量和JSON变量的区别。他们抛出的异常也不一样,对应从异常中获取注解中message的方式:
- JSON传参方式抛出异常为
MethodArgumentNotValidException
,通过ex.getBindingResult().getFieldError().getDefaultMessage()
获取message信息。 - URL变量方式抛出异常为
ConstraintViolationException
,通过ex.getConstraintViolations().stream().findFirst().get().getMessage()
获取。