我一直在尝试将spring验证器添加到spring-data-rest项目中。
我跟着沿着,并通过这个链接设置“入门”应用程序:http://spring.io/guides/gs/accessing-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();
}
}
我希望POST到http://localhost:8080/people
URL会导致某种错误,因为PeopleValidator拒绝了所有内容。但是,不会抛出错误,也不会调用验证器。
我也尝试过手动设置验证器,如spring-data-rest文档的5.1节所示。
我错过了什么?
5条答案
按热度按时间a0zr77ik1#
因此,看起来之前/之后的“保存”事件只在PUT和PATCH上触发。POST时,将触发before/after“create”事件。
我尝试了手动方式再次使用
configureValidatingRepositoryEventListener
覆盖和它的工作。我不知道我在工作和在家里有什么不同。我明天再看。我当然很想听听其他人是否有关于为什么它不起作用的建议。
为了记录在案,下面是新的Application.java类的样子。
bq3bfh9z2#
看起来这个功能目前还没有实现(2.3.0),不幸的是没有事件名称的常量,否则下面的解决方案不会那么脆弱。
Configuration
使用正确的事件将所有正确命名的Validator
bean添加到ValidatingRepositoryEventListener
。3yhwsihp3#
有点戳在黑暗中-我没有使用
spring-data-rest
。然而,在阅读了你所遵循的教程之后,我认为问题在于你需要一个PersonValidator
而不是一个PeopleValidator
。相应地检查所有内容:PersonValidator
申请
dba5bblo4#
另一种方法是使用这里指定的带注解的处理程序http://docs.spring.io/spring-data/rest/docs/2.1.0.RELEASE/reference/html/events-chapter.html#d5e443
下面是一个如何使用带注解的处理程序的示例:
示例来自github,为简洁起见进行了编辑。
dluptydi5#
我猜spring-data-rest是基于Spring Data PersistentEntity构建的,直接应用验证可能不容易(针对模型对象的验证信息)。
您可能需要执行以下操作才能进行请求验证:
1.创建一个bean validator工厂来创建JSR-303 bean validator(如果你还没有的话):
public class StringName {
}
1.添加bean验证器
@Component @ RedArgsConstructor public class CustomizedRepositoryRestConfiguration实现了RepositoryRestConfigurer {
}