如何从bean验证批注中获取有效负载属性

Pau*_*oso 5 java validation spring annotations bean-validation

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

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

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

@ResponseStatus(BAD_REQUEST)
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<?> methodArgumentNotValidException(MethodArgumentNotValidException exception) {
Run Code Online (Sandbox Code Playgroud)

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

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

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

Har*_*rdy 2

假设您的起点是 a,您将通过ConstraintViolationException获取实例集。ConstraintViolationgetConstraintViolations()

每个ConstraintViolation都有一个getConstraintDescriptor(),它为您提供有关失败约束的元数据。一旦你有了,ConstraintDescriptor你就可以打电话了getPayload()

  • 谢谢@Hardy,问题是起点是 MethodArgumentNotValidException 因为它不是通过代码执行验证,而是依赖于注释。 (2认同)