Spring Data Rest Validation Confusion

后端 未结 3 1062
情书的邮戳
情书的邮戳 2020-12-13 16:40

Looking for some help with Spring data rest validation regarding proper handling of validation errors:

I\'m so confused with the docs regarding spring-data-rest vali

3条回答
  •  佛祖请我去吃肉
    2020-12-13 17:14

    I think your problem is that the bean validation is happening too late - it is done on the JPA level before persist. I found that - unlike spring mvc - spring-data-rest is not doing bean validation when a controller method is invoked. You will need some extra configuration for this.

    You want spring-data-rest to validate your bean - this will give you nice error messages responses and a proper http return code.

    I configured my validation in spring-data-rest like this:

    @Configuration
    public class MySpringDataRestValidationConfiguration extends RepositoryRestConfigurerAdapter {
    
        @Bean
        @Primary
        /**
         * Create a validator to use in bean validation - primary to be able to autowire without qualifier
         */
        Validator validator() {
            return new LocalValidatorFactoryBean();
        }
    
        @Bean
        //the bean name starting with beforeCreate will result into registering the validator before insert
        public BeforeCreateCompanyValidator beforeCreateCompanyValidator() {
            return new BeforeCreateCompanyValidator();
        }
    
        @Override
        public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
            Validator validator = validator();
            //bean validation always before save and create
            validatingListener.addValidator("beforeCreate", validator);
            validatingListener.addValidator("beforeSave", validator);
        }
    }
    

    When bean validation and/or my custom validator find errors I receive a 400 - bad request with a payload like this:

        Status = 400
        Error message = null
        Headers = {Content-Type=[application/hal+json]}
        Content type = application/hal+json
       Body = {
         "errors" : [ {
         "entity" : "siteWithAdminUser",
         "message" : "may not be null",
         "invalidValue" : "null",
         "property" : "adminUser"
         } ]
       }
    

提交回复
热议问题