[英]Javax validation does not include field name
我们已经建立了一个 API 其中在我们的 model 我们有一个领域
@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"
所以问题是为什么我们没有在客户端错误消息中获取字段名称。
我错过了什么吗?
API 基于 spring 启动
默认不通过。 您可以实现自己的错误处理程序来自定义传回的消息,例如使用 @ControllerAdvice。
一种方法是只指定消息:@Min(value = 5, message="Age must be at least 5")
在这种情况下,在@ControllerAdvice 中,您只需要阅读 getDefaultMessage()
如果您不想手动添加默认消息,方法是按照以下方式实现一些东西(使用适当的 null 检查等):
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.