javax.проверка не работает при использовании noargsconstructor

#java #validation #lombok

#java #проверка #ломбок

Вопрос:

Я пытаюсь проверить объект запроса, класс которого выглядит следующим образом:

 @Value
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
@AllArgsConstructor
public class SomeCreateRequest {
    @NotNull(message = "Name can not be null")
    @NotBlank(message = "Name can not be empty")
    String name;
}
  

Без NoArgsConstructor проверка работает, но операция POST завершается с ошибкой HttpMessageNotReadableException; с NoArgsConstructor операция POST завершается успешно, но проверка не работает.

Что я делаю не так?

PS используя Java 8, Spring 2.3.4.RELEASE, javax.validation 2.0.1.Final, и мой контроллер выглядит следующим образом:

 @RequiredArgsConstructor
@RestController
@RequestMapping("/api")
public class MyController {

    private final MyService myService;

    @PostMapping()
    public MyResponse submit(@Valid @RequestBody SomeCreateRequest request){
        return myService.create(request);
    }
}
  

Комментарии:

1. используете ли вы @Valid в контроллере? будьте осторожны @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) с этим, потому что десериализатору Jackson нужен конструктор без аргументов, можете ли вы привести пример аннотаций вашего контроллера, которые вы используете?

2. Да, я использую @Valid в своем контроллере. Смотрите мое редактирование вопроса.

3. Для создания объекта требуется конструктор без аргументов или метаданные JSON, чтобы знать, какой конструктор вызывать. Тот факт, что проверка не работает, вероятно, из-за того, что вы добавили javax.validation в качестве зависимости, тогда как вы должны были использовать spring-boot-starter-validation . Последнее включает в себя как API, так и реализацию, добавление только API ничего не дает.