Pertanyaan Spring-Boot Cara benar menyuntikkan javax.validation.Validator


Saya punya masalah menyuntikkan Validator ke kacang aplikasi musim semi ketika mencoba untuk memvalidasi model menggunakan JSR-303 (hibernate-validator)

Kelas konfigurasi utama saya adalah:

@EnableAutoConfiguration
@EnableWebMvc // <---
@EnableJpaRepositories("com.example")
@EntityScan("com.example")
public class MainConfiguration {

Menurut javadocs:

/**
 * Provide a custom {@link Validator} instead of the one created by default.
 * The default implementation, assuming JSR-303 is on the classpath, is:
 * {@link org.springframework.validation.beanvalidation.LocalValidatorFactoryBean}.
 * Leave the return value as {@code null} to keep the default.
 */
Validator getValidator();

Hibernate-validator ada di classpath. Saya mencoba menyuntikkannya ke dalam Repositori:

@Repository
public class UserRepositoryImpl implements UserRepositoryCustom    {

    @Autowired
    private Validator validator;

Pengecualian dilemparkan:

 No qualifying bean of type [javax.validation.Validator] found for dependency:

MEMPERBARUI:

Pekerjaan parsial untuk ini adalah untuk mendefinisikan ini di kelas konfigurasi utama:

  @Bean
    public Validator validator() {

        return new org.springframework.validation.beanvalidation.LocalValidatorFactoryBean();
    }

Tetapi tes integrasi (yang membutuhkan org.springframework.test.context.web.WebAppConfiguration; anotasi dan penggunaan logika validasi) gagal.


32
2018-05-12 08:43


asal


Jawaban:


Anda perlu menyatakan jenis kacang LocalValidatorFactoryBean seperti ini:

<bean id="validator"
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

dalam XML atau

@Bean
public javax.validation.Validator localValidatorFactoryBean() {
   return new LocalValidatorFactoryBean();
}

di Java Config.

Ini bagian dari dokumentasi Spring memiliki semua detail


44
2018-05-12 17:42