我的属性上有一个带有验证注释的类,如下所示:
@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())一样。
答案 0 :(得分:1)
假设您的起点是Regex.IsMatch
,您将通过ConstraintViolationException
获取ConstraintViolation
个实例。
每个getConstraintViolations()
都有一个ConstraintViolation
,它会为您提供有关失败约束的元数据。获得getConstraintDescriptor()
后,您只需拨打ConstraintDescriptor
。
答案 1 :(得分:0)
要从ConstraintViolation
中提取ConstraintViolationException
,请使用:
constraintViolationException.getConstraintViolations();
要从ConstraintViolation
中获取动态有效载荷:
(ClassToMap) ((ConstraintViolationImpl) constraintViolation).getDynamicPayload(ClassToMap.class))