Javax验证不包括字段名
我们已经构建了一个API,在我们的模型中有一个字段Javax验证不包括字段名,java,spring,validation,Java,Spring,Validation,我们已经构建了一个API,在我们的模型中有一个字段 @Min(1) @Max(16) private Long demoField; 当我们向demoField提供17 它会在客户端给我们带来一个错误 “必须小于或等于16” 但是,当我们看到违规消息时,它包含字段名,消息如下所示 “demoField:必须小于或等于16” 因此,问题是为什么我们不能在客户端错误消息中获得字段名 我错过什么了吗 API构建在spring boot上,默认情况下不会通过。您可以实现自己的错误处理程序来定制传递回的
@Min(1) @Max(16)
private Long demoField;
当我们向demoField提供17
它会在客户端给我们带来一个错误
“必须小于或等于16”
但是,当我们看到违规消息时,它包含字段名,消息如下所示
“demoField:必须小于或等于16”
因此,问题是为什么我们不能在客户端错误消息中获得字段名
我错过什么了吗
API构建在spring boot上,默认情况下不会通过。您可以实现自己的错误处理程序来定制传递回的消息,例如使用@ControllerAdvice 一种方法是只指定消息: @最小值(值=5,消息=“年龄必须至少为5”) 在这种情况下,在@ControllerAdvice中,您只需要读取getDefaultMessage() 如果您不想手动添加默认消息,那么方法将是实现以下内容(使用适当的空检查等):
package com.example.demo;
导入org.springframework.http.HttpHeaders;
导入org.springframework.http.HttpStatus;
导入org.springframework.http.ResponseEntity;
导入org.springframework.validation.BindException;
导入org.springframework.web.bind.annotation.ControllerAdvice;
导入org.springframework.web.context.request.WebRequest;
导入org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@控制器建议
公共类GlobalExceptionHandler扩展了ResponseEntityExceptionHandler{
@凌驾
保护响应手柄异常(
BindException ex、HttpHeaders标头、HttpStatus状态、WebRequest请求){
返回新响应(
例如getFieldError().getField()+“:”+ex.getFieldError().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);
}
}