[SPRING] 스프링 부트 스타터 데이터 휴식, @Notnull 제약 조건이 작동하지 않음
SPRING스프링 부트 스타터 데이터 휴식, @Notnull 제약 조건이 작동하지 않음
Person 객체에 @NotNull 제약 조건을 추가하려고하지만 null 전자 메일을 사용하여 새 Person을 @POST 할 수 있습니다. 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
}
저장소 클래스 :
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends MongoRepository<Person, String> {
}
신청 종류 :
@SpringBootApplication
public class TalentPoolApplication {
public static void main(String[] args) {
SpringApplication.run(TalentPoolApplication.class, args);
}
}
Pom.hml
...
<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>
...
Postman을 통해 @POST 새로운 객체를 만들 때 :
{
"username": "deadpool",
"email": null
}
STATUS 201이 페이로드로 생성됩니다.
{
"username": "deadpool",
"password": null,
"email": null
....
....
}
해결법
-
==============================
1.나는 똑같은 문제가 있었지만 유효성 확인을 사용하는 것이 나에게 효과가 없었습니다. JPA와 MongoDb 모두에서 이것에 오래 머무르는 다른 사람을 구하기 위해이 방법을 사용했습니다. 이 작업은 유효성 검사를 수행 할뿐만 아니라 기본 500보다 400 회의 오류가 발생하기 쉽습니다.
나는 똑같은 문제가 있었지만 유효성 확인을 사용하는 것이 나에게 효과가 없었습니다. JPA와 MongoDb 모두에서 이것에 오래 머무르는 다른 사람을 구하기 위해이 방법을 사용했습니다. 이 작업은 유효성 검사를 수행 할뿐만 아니라 기본 500보다 400 회의 오류가 발생하기 쉽습니다.
이것을 build.gradle 의존성에 추가해야했습니다.
compile('org.hibernate:hibernate-validator:4.2.0.Final')
및이 구성 클래스
@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()); } }
-
==============================
2.빈 문자열의 유효성을 검사하는 @NotNull 주석의 자체 버전을 만드는 것이 더 좋습니다.
빈 문자열의 유효성을 검사하는 @NotNull 주석의 자체 버전을 만드는 것이 더 좋습니다.
@Documented @Constraint(validatedBy = NotEmptyValidator.class) @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface NotEmpty { String message() default "{validator.notEmpty}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } public class NotEmptyValidator implements ConstraintValidator<NotEmpty, Object> { @Override public void initialize(NotEmpty notEmpty) { } @Override public boolean isValid(Object obj, ConstraintValidatorContext cxt) { return obj != null && !obj.toString().trim().equals(""); } }
-
==============================
3.다음 코드를 사용하여 유효성을 검사 할 수 있습니다.
다음 코드를 사용하여 유효성을 검사 할 수 있습니다.
@Configuration @Import(value = MongoAutoConfiguration.class) public class DatabaseConfiguration extends AbstractMongoConfiguration { @Resource private Mongo mongo; @Resource private MongoProperties mongoProperties; @Bean public ValidatingMongoEventListener validatingMongoEventListener() { return new ValidatingMongoEventListener(validator()); } @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } @Override protected String getDatabaseName() { return mongoProperties.getDatabase(); } @Override public Mongo mongo() throws Exception { return mongo; } }
from https://stackoverflow.com/questions/36649331/spring-boot-starter-data-rest-notnull-constraint-not-working by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] ApplicationListener 메서드에서 세션 객체를 가져 오는 방법 (0) | 2019.02.15 |
---|---|
[SPRING] 스프링 부트 프로파일을 사용하는 방법 (0) | 2019.02.15 |
[SPRING] 스프링 및 크로스 컨텍스트 : WebAsyncManager를 WebAsyncManager에 캐스팅 할 수 없습니다. (0) | 2019.02.15 |
[SPRING] Spring-Batch : 다음 단계를 결정하기 위해 StepListener에서 사용자 정의 Job Exit STATUS를 리턴하려면 어떻게해야합니까? (0) | 2019.02.15 |
[SPRING] 자바 응용 프로그램에서 전자 메일을 보내는 중 예외 : 릴레이가 거부되었습니다. (0) | 2019.02.15 |