小编典典

Spring-Rest验证器

spring-boot

我一直在尝试将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();
    }
}

我希望发布到http://localhost:8080/peopleURL会导致某种错误,因为PeopleValidator拒绝所有操作。但是,不会引发任何错误,并且永远不会调用验证器。

我也尝试过手动设置验证器,如spring-data-rest文档的5.1节所示。

我想念什么?


阅读 306

收藏
2020-05-30

共1个答案

小编典典

因此,似乎“保存”之前/之后的事件仅在PUT和PATCH上触发。发布时,将触发“创建”之前/之后的事件。

我再次使用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());
    }
}
2020-05-30