Java 如何从bean验证注释中获取有效负载属性
我有一个在属性上带有验证注释的类,如下所示:Java 如何从bean验证注释中获取有效负载属性,java,spring,validation,annotations,bean-validation,Java,Spring,Validation,Annotations,Bean Validation,我有一个在属性上带有验证注释的类,如下所示: @NotNull(payload = INVALID_CATEGORY_DESCRIPTION.class) @Size(min = 1, max = 255, payload = INVALID_CATEGORY_DESCRIPTION_LENGHT.class) private String description; 然后我有一个@ControllerAdvice来处理验证异常 @ResponseStatus(BAD_REQUEST) @Res
@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) {
@ResponseStatus(请求错误)
@应答器
@ExceptionHandler(MethodArgumentNotValidException.class)
公共响应属性methodArgumentNotValidException(methodArgumentNotValidException异常){
当一个或多个验证注释失败时,将按预期触发异常处理程序
为了从注释中获取payload属性,我在有验证错误的字段上进行迭代,然后在注释上进行迭代,然后将注释名称与FieldError代码进行比较。有了注释,我可以访问有效负载
我想知道是否有一种更优雅的方法来获取触发异常的负载或注释,就像消息属性(exception.getMessage())一样.假设您的起点是
ConstraintViolationException
,则通过getConstraintViolations()
获得ConstraintViolation
实例集
每个
ConstraintViolation
都有一个getConstraintDescriptor()
,它为您提供有关失败约束的元数据。一旦有了ConstraintDescriptor
,您只需调用getPayload()
来检索ConstraintViolation
(s)超出ConstraintViolationException
限制使用:
constraintViolationException.getConstraintViolations();
要从约束碰撞中获取动态有效载荷
:
(ClassToMap) ((ConstraintViolationImpl) constraintViolation).getDynamicPayload(ClassToMap.class))
谢谢@Hardy,问题是起点是MethodArgumentNotValidException,因为它不是通过代码执行验证,而是依赖于注释。谢谢。还有
getPayload()
返回??对象迭代器?类?用于解析?强制转换?这里有同样的问题-如何获取ConstraintViolationException而不是MethodArgumentNotValidException。作者说他认为这与@Hardy给出的答案是一致的。有些人可能会觉得这很有帮助。