Spring boot Springboot显示无效日期(YearMonth)格式的错误消息:例如2020-15
我有一个springboot项目,如果给定的日期格式不正确,我想显示一个错误响应。 正确的格式是yyyy-MM(java.time.YearMonth),但是如果有人发送2020-13、2020-111或2020-1,我想显示一条消息 当我添加了一个自定义验证器时,调试器会带着一个有效的请求进入其中,但不会带着一个错误的请求。我还尝试将message.properties与Spring boot Springboot显示无效日期(YearMonth)格式的错误消息:例如2020-15,spring-boot,validation,date-format,Spring Boot,Validation,Date Format,我有一个springboot项目,如果给定的日期格式不正确,我想显示一个错误响应。 正确的格式是yyyy-MM(java.time.YearMonth),但是如果有人发送2020-13、2020-111或2020-1,我想显示一条消息 当我添加了一个自定义验证器时,调试器会带着一个有效的请求进入其中,但不会带着一个错误的请求。我还尝试将message.properties与类型不匹配.project.startdate=一起使用。请输入一个有效日期。但我在回复正文中也没有看到该消息。 应用程序似
类型不匹配.project.startdate=一起使用。请输入一个有效日期。
但我在回复正文中也没有看到该消息。
应用程序似乎不理解我的错误请求,然后总是抛出一个空正文的错误请求,这并不奇怪,因为它不是有效日期
有人能告诉我如何在这些错误值的响应中显示错误消息吗?
或者没有其他方法使用字符串并将其转换为YearMonth对象,以便显示catch并显示错误消息
请求对象:
@Getter
@Setter
public class Project {
@NotNull(message = "mandatory")
@DateTimeFormat(pattern = "yyyy-MM")
private YearMonth startdate;
}
控制器:
@RestController
@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public class ProjectController {
@PostMapping(value = "/project", consumes = MediaType.APPLICATION_JSON_VALUE)
public Project newProject(@Valid @RequestBody Project newProject) {
return projectService.newProject(newProject);
}
}
例外处理程序:
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@SneakyThrows
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
headers.add("Content-Type", "application/json");
ObjectMapper mapper = new ObjectMapper();
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach(error -> {
String name;
if (error instanceof FieldError)
name = ((FieldError) error).getField();
else
name = error.getObjectName();
String errorMessage = error.getDefaultMessage();
errors.put(name, errorMessage);
});
return new ResponseEntity<>(mapper.writeValueAsString(errors), headers, status);
}
}
@RestControllerAdvice
公共类GlobalExceptionHandler扩展了ResponseEntityExceptionHandler{
@鬼鬼祟祟
@凌驾
受保护的ResponseEntity handleMethodArgumentNotValid无效(MethodArgumentNotValidException ex、HttpHeaders标头、HttpStatus状态、WebRequest请求){
添加(“内容类型”、“应用程序/json”);
ObjectMapper mapper=新的ObjectMapper();
映射错误=新建HashMap();
例如:getBindingResult().getAllErrors().forEach(错误->{
字符串名;
if(错误实例of FieldError)
name=((FieldError)error.getField();
其他的
name=错误。getObjectName();
字符串errorMessage=error.getDefaultMessage();
错误。put(名称、错误消息);
});
返回新的响应属性(mapper.writeValueAsString(错误)、标题、状态);
}
}