Spring @Validated注解进阶使用(条件执行)

  • POST请求

    Spring @Validated注解是@Valid注解的变体,增加groups属性进行分组验证。

  1. 首先定义一个分组
public interface ModifyRequest {
}
  1. 在@Validated注解中指定分组
@PostMapping("/modifyResource")
public void modifyResource(@RequestBody @Validated(ModifyRequest.class) AdminResourceReqVo req) {
        
}
  1. 在请求实体中的校验注解中指定分组
@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的方式:

  1. JSON传参方式抛出异常为MethodArgumentNotValidException,通过ex.getBindingResult().getFieldError().getDefaultMessage()获取message信息。
  2. URL变量方式抛出异常为ConstraintViolationException,通过ex.getConstraintViolations().stream().findFirst().get().getMessage()获取。

你可能感兴趣的:(spring,java,restful)