Spring引导启动数据休息,@ Notnull约束不起作用

oxy*_*xyt 4 rest spring json mongodb spring-data-rest

我试图将@NotNull约束添加到我的Person对象中,但我仍然可以使用空电子邮件@POST一个新的Person.我正在使用MongoDB的Spring启动休息.

实体类:

import javax.validation.constraints.NotNull;

public class Person {
    @Id 
    private String id;
    private String username;
    private String password;
    @NotNull // <-- Not working
    private String email;
    // getters & setters
}
Run Code Online (Sandbox Code Playgroud)

存储库类:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends MongoRepository<Person, String> {
}
Run Code Online (Sandbox Code Playgroud)

申请类:

@SpringBootApplication
public class TalentPoolApplication {
    public static void main(String[] args) {
        SpringApplication.run(TalentPoolApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

的pom.xml

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.BUILD-SNAPSHOT</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
...
Run Code Online (Sandbox Code Playgroud)

当我通过Postman @POST一个新对象时:

{
  "username": "deadpool",
  "email": null
}
Run Code Online (Sandbox Code Playgroud)

我仍然STATUS 201使用此有效负载创建:

{
    "username": "deadpool",
    "password": null,
    "email": null
     ....
     ....
}
Run Code Online (Sandbox Code Playgroud)

小智 6

我有同样的问题,但只是启用验证对我不起作用,这确实适用于JPA和MongoDb,以节省其他人在这方面的花费年龄.这不仅可以使验证工作,而且我得到一个很好的宁静的400错误,而不是默认的500.

不得不将它添加到我的build.gradle依赖项中

    compile('org.hibernate:hibernate-validator:4.2.0.Final')
Run Code Online (Sandbox Code Playgroud)

和这个配置类

@Configuration
public class CustomRepositoryRestConfigurerAdapter extends RepositoryRestConfigurerAdapter {


   @Bean
   public Validator validator() {
       return new LocalValidatorFactoryBean();
   }

   @Override
   public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
       validatingListener.addValidator("afterCreate", validator());
       validatingListener.addValidator("beforeCreate", validator());
       validatingListener.addValidator("afterSave", validator());
       validatingListener.addValidator("beforeSave", validator());
   }
}
Run Code Online (Sandbox Code Playgroud)