[目前,我正在Java播放框架中实现自定义验证。我有一个包含元素列表的类:
public class StandardRequest{
...
private List<@Valid StandardMaterial> materials;
...
//getters setters
并且StandardMaterial类内部具有验证逻辑:
@Validate
public class StandardMaterial extends Material implements Validatable<ValidationError> {
private Integer condition_value;
...
@Override
public ValidationError validate() {
if(condition_value < 0 || condition_value > 100){
return new ValidationError("materials","must be integer between 0 and 100");
}
上述类的输入json是这样的:
"materials": [{"material_number": "1", "condition_type":"A1","condition_value": "-15"},
{"material_number": 2","condition_type":"A2","condition_value": "-25"}]
这将产生验证错误消息作为响应:
"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 } } }
这样您可以做到的...我还没有显示所有内容。但是您会知道如何做的。