我有一个在我的属性上带有验证注释的类,就像这个:
@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) {
当一个或多个验证注释失败时,将按预期触发异常处理程序。
为了从注释中获取 payload 属性,我遍历具有验证错误的字段,然后遍历注释,然后才将注释名称与 FieldError 代码进行比较。有了注释,我就可以访问有效载荷。
我想知道是否有更优雅的方法来获取触发异常的负载或注释,就像消息属性 (exception.getMessage()) 一样。
最佳答案
假设您的起点是 ConstraintViolationException
,您将通过 getConstraintViolations()
获取一组 ConstraintViolation
实例。
每个 ConstraintViolation
都有一个 getConstraintDescriptor()
,它为您提供有关失败约束的元数据。获得 ConstraintDescriptor
后,您只需调用 getPayload()
。
关于java - 如何从 bean 验证注释中获取 payload 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36343617/