java - 为列表中的特定元素设置 ValidationError 消息
问题描述
目前,我正在游戏框架 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
}
}
}
这样你就可以做到......我没有展示一切......但你会知道如何去做。
推荐阅读
- ios - 禁用自动更正类型不适用于 UITextfield
- c++ - 在 C++ 中通过引用传递整个数组的不同方法
- spring-batch - Spring Batch:显示加载失败的错误行号
- python - Python:使用 OpenCV 无法识别 Panasonic 网络流
- android - 使用默认应用程序 nativescript 7 打开文件
- python - 将图像传递给 python FastAPI api 端点
- api - 根据文档的自定义字段使用 Graph 查询 SharePoint
- c++ - 当我在 Visual Studio Code 中的 Windows 上的 C++ 中运行此代码时,它会发生故障
- google-cloud-platform - BigQuery 传输卡在待处理状态
- python - 为什么我使用 modin.pandas 比使用 Pandas 需要更长的时间 [ray]