Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从bean验证注释中获取有效负载属性_Java_Spring_Validation_Annotations_Bean Validation - Fatal编程技术网

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给出的答案是一致的。有些人可能会觉得这很有帮助。