java - Javax 验证不包括字段名称
问题描述
我们已经构建了一个 API,在我们的模型中我们有一个字段
@Min(1) @Max(16)
private Long demoField;
当我们向 demoField 提供 17 时,它会在客户端向我们抛出错误
"must be less than or equal to 16"
但是当我们看到违规消息时,它包含字段名称,消息看起来像
"demoField: must be less than or equal to 16"
因此,为什么我们没有在客户端错误消息中获取字段名称的问题。
我错过了什么吗?
基于 Spring Boot 构建的 API
解决方案
默认情况下不通过。您可以实现自己的错误处理程序来自定义传回的消息,例如使用@ControllerAdvice。
一种方法是只指定消息:@Min(value = 5, message="Age must be at least 5")
在@ControllerAdvice 中的这种情况下,您只需要阅读 getDefaultMessage()
如果您不想手动添加默认消息,则该方法将按照以下方式实现(使用适当的空检查等):
package com.example.demo;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleBindException(
BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
return new ResponseEntity<>(
ex.getFieldError().getField() + ": " + ex.getFieldError().getDefaultMessage(),
headers,
status);
}
}
推荐阅读
- python - 获取 NameError:Vapoursynth/Python 中未定义名称“视频”
- oracle - 如何使用 curl 在 Oracle Apex 中提交页面
- jira - 在 JIRA 中返回没有父级的问题的查询
- rxjs - RxJS:使用自定义逻辑匹配两个可观察对象
- ios - 越野车 UI 表格视图
- python - 解析 PDF 时忽略表格
- java - 你应该如何在 Java 中处理 MongoDB 异常?
- mongodb - MongoDB获取项目数组中的item.field列表
- java - 最后在与特定键匹配的数组中添加元素
- function - 在 Haskell 中减少命题的大小