上下文:
我的 Spring Boot 后端应用程序中有一个 REST API。此 REST API 具有带有请求正文的HTTP POST 端点。此请求正文作为java DTO 类包含多个字段(属性)。我向这些字段添加了
jakarta.validation.constraints
注释,例如 @NotNull
@NotEmpty
和其他注释以验证输入数据。
现在:
如果这些字段中的任何一个违反了这些
jakarta.validation.constraints
注释约束,它会立即抛出一个异常,当然我用ExceptionHandler class
捕获它,它返回HTTP 400 Bad Request并带有正确的错误消息。问题是,使用这种方法,我无法向用户提供所有字段验证违规,让用户完全了解哪些字段输入不正确,哪些字段输入正确,因为在验证第一个错误输入后会抛出异常。
我需要:
我需要有机会向用户发送一条包含所有字段验证违规的错误消息。
我的应用程序有:
org.springframework启动3.2.5版本
java 17
您可以使用 org.springframework.validation.Validator 实例手动验证对象并获取所有错误。这是一个例子:
@Slf4j
@Component
public class ValidateServiceImpl implements ValidateService {
private Validator validator;
@Autowired
public ValidateServiceImpl(@Qualifier("defaultValidator")Validator validator) { // 1
this.validator = validator;
}
@Override
public boolean isValid(Object bean, String objectName) {
BeanPropertyBindingResult validateResult = new BeanPropertyBindingResult(bean, objectName); // 2
validator.validate(bean, validateResult); // 3
boolean isValid = !validateResult.hasErrors(); // 4
if(!isValid && log.isDebugEnabled()){
log.debug("{} is not valid. ObjectName: {} Errors:{}", bean, objectName, validateResult.getAllErrors()); // 5
}
return isValid;
}}