Не работает @Valid в контроллере для DTO

при отправке невалидного запроса на http://localhost:8080/student не срабатывает аннотация и невалидные данные проходят дальше в контроллер, сервис и т.д.

@RestController
@RequestMapping("/student")
public class StudentController{
    private final StudentService service;
    @Autowired
    public StudentController(StudentService service) {
        this.service = service;
    }
    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<StudentDTO> doPost(@RequestBody @Valid StudentDTO studentDTO) {
            try {
                StudentDTO studentDTOOut = service.saveNewStudent(studentDTO);
                return new ResponseEntity<>( studentDTOOut, HttpStatus.OK);
                }
            catch (SQLException e) {
                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
            } catch (RuntimeException e) {
                return new ResponseEntity<>(HttpStatus.NOT_FOUND);
            }
    }

DTO

public class StudentDTO {

    @NotNull
    private UUID id;

    @NotBlank
    private String surname;
    //getters,setters
}

pom.xml

  <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>6.0.9</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>3.1.2</version>
    </dependency>
            <dependency>
        <groupId>org.hibernate.orm</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>6.1.7.Final</version>
    </dependency>
            <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.1.7.Final</version>
    </dependency>


    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.6.0</version>

пробовала ставить @Validated над классом контроллера, добавлять @JsonProperty(required = true) над полями ДТО. Удалять produces = MediaType.APPLICATION_JSON_VALUE.

Не работает никак.

есть еще подозрение: аннотации @Validated и @Validat должны работать без spring boot? (переход на спринг бут не предлагать)


Ответы (0 шт):