如何从bean验证注释中获取有效内容属性

我的属性上有一个带有验证注释的类,如下所示:

@NotNull(payload = INVALID_CATEGORY_DESCRIPTION.class)
@Size(min = 1, max = 255, payload = INVALID_CATEGORY_DESCRIPTION_LENGHT.class)
private String description;

然后我有一个@ControllerAdvice来处理验证异常.

@ResponseStatus(BAD_REQUEST)
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<?> methodArgumentNotValidException(MethodArgumentNotValidException exception) {

当一个或多个验证注释失败时,将按预期触发异常处理程序.

为了从注释中获取有效负载属性,我在具有验证错误的字段上进行迭代,然后在注释上进行迭代,然后仅将注释名称与FieldError代码进行比较.手中的注释我可以访问有效负载.

我想知道是否有一种更优雅的方式来获取有效负载或触发异常的注释,就像消息属性(exception.getMessage())一样.

最佳答案 假设您的起点是ConstraintViolationException,您将通过getConstraintViolations()获取一组ConstraintViolation实例.

然后,每个ConstraintViolation都有一个getConstraintDescriptor(),它为您提供有关失败约束的元数据.一旦有了ConstraintDescriptor,就可以调用getPayload().

点赞