Java 为列表中的特定元素设置ValidationError消息

Java 为列表中的特定元素设置ValidationError消息,java,validation,jackson,message,playback,Java,Validation,Jackson,Message,Playback,目前,我正在play框架Java中实现自定义验证。 我有一个包含元素列表的类: public class StandardRequest{ ... private List<@Valid StandardMaterial> materials; ... //getters setters 这将生成一条验证错误消息作为响应,如下所示: "validations": [ { "property": "materials",

目前,我正在play框架Java中实现自定义验证。 我有一个包含元素列表的类:

public class StandardRequest{
...
private List<@Valid StandardMaterial> materials;
...
//getters setters
这将生成一条验证错误消息作为响应,如下所示:

 "validations": [
            {
                "property": "materials",
                "message": "must be integer between 0 and 100"
            },
            {
                "property": "materials",
                "message": "must be integer between 0 and 100"
            }
        ],
我现在无法实现的是指定材料的索引,我需要得到以下响应:

"validations": [
            {
                "property": "materials[0]",
                "message": "must be integer between 0 and 100"
            },
            {
                "property": "materials[1]",
                "message": "must be integer between 0 and 100"
            }
        ],

Any ideas how can I do that?
Thanks in advance

1。编辑您的StandardMaterial类,如下所示

import javax.validation.constraints.Min;
import javax.validation.constraints.Max;

public class StandardMaterial {

@Size(value=0,message="must be greater than or equal to 0")
@Size(value=100,message="must be less than or equal to 100")
private Integer condition_value;

}
2。通过使用@RestControllerAdvise创建单独的类,以便从任何类全局处理此类错误

@RestControllerAdvice
public class GlobleExceptionHandler extends ResponseEntityExceptionHandler{

@Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
            HttpHeaders headers, HttpStatus status, WebRequest request) {

//Get All Errors
List<FieldError> errors = ex.getBindingResult().getFieldErrors();

//Iterate and add to your custom object
for(FieldError e:errors){
    e.getDefaultMessage();//Your Error Message
    e.getField();//Field Name with index
}

}

}
@RestControllerAdvice
公共类GlobleExceptionHandler扩展了ResponseEntityExceptionHandler{
@凌驾
受保护响应handleMethodArgumentNotValid无效(MethodArgumentNotValidException ex,
HttpHeaders标头、HttpStatus状态、WebRequest请求){
//获取所有错误
列表错误=例如getBindingResult().getFieldErrors();
//迭代并添加到自定义对象
for(字段错误e:错误){
e、 getDefaultMessage();//您的错误消息
e、 getField();//带索引的字段名
}
}
}

这样你就可以做到……我并没有展示所有东西……但你会知道怎么做。

谢谢你的回答。我的项目在play框架中,因此不确定是否会应用相同的解决方案。不知道如何在play框架中调整您的解决方案。
import javax.validation.constraints.Min;
import javax.validation.constraints.Max;

public class StandardMaterial {

@Size(value=0,message="must be greater than or equal to 0")
@Size(value=100,message="must be less than or equal to 100")
private Integer condition_value;

}
@RestControllerAdvice
public class GlobleExceptionHandler extends ResponseEntityExceptionHandler{

@Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
            HttpHeaders headers, HttpStatus status, WebRequest request) {

//Get All Errors
List<FieldError> errors = ex.getBindingResult().getFieldErrors();

//Iterate and add to your custom object
for(FieldError e:errors){
    e.getDefaultMessage();//Your Error Message
    e.getField();//Field Name with index
}

}

}