我一直在尝试将spring验证器添加到spring-data-rest项目中。
…现在我正尝试通过遵循此处的文档来添加自定义PeopleValidator:http ://docs.spring.io/spring- data/rest/docs/2.1.0.RELEASE/reference/html/validation-chapter .html
我的自定义PeopleValidator看起来像
package hello; import org.springframework.validation.Errors; import org.springframework.validation.Validator; public class PeopleValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return true; } @Override public void validate(Object target, Errors errors) { errors.reject("DIE"); } }
…并且我的Application.java类现在看起来像这样
package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; @Configuration @EnableJpaRepositories @Import(RepositoryRestMvcConfiguration.class) @EnableAutoConfiguration public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public PeopleValidator beforeCreatePeopleValidator() { return new PeopleValidator(); } }
我希望发布到http://localhost:8080/peopleURL会导致某种错误,因为PeopleValidator拒绝所有操作。但是,不会引发任何错误,并且永远不会调用验证器。
http://localhost:8080/people
我也尝试过手动设置验证器,如spring-data-rest文档的5.1节所示。
我想念什么?
因此,似乎“保存”之前/之后的事件仅在PUT和PATCH上触发。发布时,将触发“创建”之前/之后的事件。
我再次使用configureValidatingRepositoryEventListener覆盖以手动方式尝试了它,并且它起作用了。我不确定我在工作中与在家里所做的不同。我明天要看。
configureValidatingRepositoryEventListener
我肯定想听听其他人是否对它为什么行不通提出建议。
作为记录,这是新的Application.java类的外观。
package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.rest.core.event.ValidatingRepositoryEventListener; import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; @Configuration @EnableJpaRepositories @Import(RepositoryRestMvcConfiguration.class) @EnableAutoConfiguration public class Application extends RepositoryRestMvcConfiguration { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override protected void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) { validatingListener.addValidator("beforeCreate", new PeopleValidator()); } }