Spring boot Springboot显示无效日期(YearMonth)格式的错误消息:例如2020-15

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=一起使用。请输入一个有效日期。但我在回复正文中也没有看到该消息。 应用程序似

我有一个springboot项目,如果给定的日期格式不正确,我想显示一个错误响应。 正确的格式是yyyy-MM(java.time.YearMonth),但是如果有人发送2020-13、2020-111或2020-1,我想显示一条消息

当我添加了一个自定义验证器时,调试器会带着一个有效的请求进入其中,但不会带着一个错误的请求。我还尝试将message.properties与
类型不匹配.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(错误)、标题、状态);
}
}