programing

Spring-Data-MongoDB를 취득하여 오브젝트를 검증하려면 어떻게 해야 합니까?

linuxpc 2023. 4. 6. 21:11
반응형

Spring-Data-MongoDB를 취득하여 오브젝트를 검증하려면 어떻게 해야 합니까?

Spring-Data-Mongodb를 사용하는 매우 간단한 Spring Boot 어플리케이션이 있습니다.

저장하는 오브젝트에 사용자 이름이 있어야 한다는 JSR-303 검증 규칙을 설정하기만 하면 됩니다.JSR-303은 버전 1.1에서 spring-data-mongodb에 추가되었다고 읽었기 때문에 오브젝트를 저장하면 검증이 된다고 생각했지만 그렇지 않습니다.

이것이 어떻게 동작하는지를 나타내는 간단한 설정 예를 가지고 있는 사람이 있습니까?

내 사용자 pojo는

public class User {

    @Id
    private String id;

    @NotNull(message = "User Name is compulsory")
    private String userName;
    private String password;

    public User() {}

    public String getId() {
      return id;
    }
    public void setId(String id) {
      this.id = id;
    }

    public String getUserName() {
      return userName;
    }
    public void setUserName(String userName) {
      this.userName = userName;
    }


    public String getPassword() {
      return password;
    }
    public void setPassword(String password) {
      this.password = PasswordAuthService.hash(password);
    }
}

컨텍스트에 검증자가 생성되어 있는 경우에만 검증이 시작되는 것을 보고 애플리케이션 클래스(모든 구성이 포함되어 있음)를 다음과 같이 업데이트하려고 했습니다.

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

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

    public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
    }

}

먼저 클래스 패스에 JSR-303 검증기가 있는지 확인합니다.다음은 예를 제시하겠습니다.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.2.0.Final</version>
</dependency>

Java config를 사용하는 경우 다음 2개의 콩을 만듭니다.

@Bean
public ValidatingMongoEventListener validatingMongoEventListener() {
    return new ValidatingMongoEventListener(validator());
}

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

Voila! 이제 검증이 작동합니다.

Spring Boot 2.3부터는 Spring-boot-starter-validation 의존관계를 에 추가해야 합니다.pom.xml(Maven의 경우):

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

검증자 bean을 선언할 필요는 없습니다.

추가Validator문맥에 맞게 하는 것이 좋은 첫걸음이지만, 당신이 요청하지 않는 한 어떤 것과도 상호 작용하지 않을 거라고 생각합니다.Spring Data의 사람들은 분명히 말할 수 있을 것입니다만, 저는 당신이 몇몇 청취자를 분명히 선언할 필요가 있다고 생각합니다.이 기능에 관한 오래된 블로그가 있지만, 가능한 한 쉽게 검색하면 찾을 수 있습니다.

Spring Boot에 유용한 autoconfig 기능이 있다고 생각되는 경우 github에 대한 자세한 제안을 해 주십시오.

제가 찾은 바로는,

public User addUser(@RequestBody  @Valid User newUser, 
                   BindingResult bindingResult) throws Exception {

  if (bindingResult.hasErrors()) {
    throw new Exception("Validation Error");
  }

컨트롤러에 대해서, 이것은 착신 json을 규칙에 근거해 검증합니다만, 무효인 데이터로 모델을 갱신하려고 하는 코드의 다른 부분을 대행 수신하도록, validatingMongoEventListener 를 설정해 둘 필요가 있습니다.

언급URL : https://stackoverflow.com/questions/22568962/how-to-i-get-spring-data-mongodb-to-validate-my-objects

반응형