@valid аннотация не работает в spring boots

#java #spring-boot #validation

#java #spring-boot #проверка

Вопрос:

Я использую spring boot для создания API, в post-запросе я использую допустимую нотацию для проверки пользовательского ввода, который публикуется в виде файла JSON, однако, когда я тестирую его, оставляя некоторые поля пустыми, они все равно передаются. Я не уверен, почему, поскольку я использую допустимые обозначения перед аргументом объекта.

что может быть не так?

Класс объекта

 
    @NotNull(message = "Please provide a name")
    private String name;

    @NotNull(message = "Please provide a gender")
    private Gender gender;

    @NotNull(message = "Please provide a birthDay")
    private String birthDay;

    @NotNull(message = "Please provide a latitude")
    private double latitude;

    @NotNull(message = "Please provide a longitude")
    private double longitude;

    public Wolf(String id, @NotNull String name, @NotNull Gender gender, @NotNull String birthDay, @NotNull double latitude, @NotNull double longitude)
    {
        this.id = id!=null ? id : UUID.randomUUID().toString();
        this.name= name;
        this.gender= gender;
        this.birthDay= birthDay;
        this.latitude= latitude;
        this.longitude= longitude;
    }
  

rest-класс контроллера

 @Autowired
    private Wolf_Service wolf_service;

    @RequestMapping("Wolf/wolf_list")
    public List<Wolf> All_wolfs()
    {
        return wolf_service.display_wolf_list();
    }
  @PostMapping(value = "Wolf/createwolf", consumes = "application/json", produces = "application/json")
    public Wolf createwolf (@Valid @RequestBody Wolf wolf)   {
        
        var isAdded =  wolf_service.add_wolf(wolf);
        if (!isAdded) {
            return null;
        }
            return wolf;
    }
  

Ответ №1:

Эта проблема часто возникает в последней версии spring boot (2.3.0).

Вам нужно будет добавить приведенную ниже зависимость:

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  

Примечание: вы можете использовать hibernate-validator вместо spring-boot-starter-validation .

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

1. Это устранило мою проблему, большое спасибо

Ответ №2:

Это зависит от того, как вы обрабатываете свои нулевые значения. Если, например, оставить поле String пустым, это означает, что вы отправите «», это будет передано, поскольку оно не является нулевым значением, следовательно, аннотация @NotNull в вашем классе Wolf не применяется.

Майкл

Ответ №3:

Убедитесь, что вы правильно импортируете из проверки.Ограничения не из com.sun.istack.

 import javax.validation.constraints.NotNull;
  

Если это не решит вашу проблему.
Проверьте pom.xml , если вы использовали зависимость проверки.

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>