Spring 5 Webflux rest控制器-如何执行输入验证?

时间:2018-07-19 13:13:34

标签: spring spring-boot hibernate-validator spring-webflux

我正在构建一个具有一些Rest Controller的Web应用程序:

@RestController
@RequestMapping(value = Path.ROOT)
public class TestController {

    @Autowired
    private AService service;

    @RequestMapping(method = RequestMethod.POST)
    public Flux<ItemResponse> doSomething(@RequestBody @Valid final ItemRequest request) {
        return service.pleaseDoSomething(request);
    }


}

我的输入对象就像:

public Class ItemRequest{
   @NotNull
   private String anInputValue
}

我的应用程序带有注释@EnableWebFlux

问题在于根本没有验证发生,当我删除以前的注释时,一切正常。

我正在使用Spring Boot 2.0.3 / tomcat dep

怎么回事?

2 个答案:

答案 0 :(得分:2)

the Spring Boot reference documentation中所述,添加@EnableWebFlux表示您希望完全控制WebFlux配置。在这种情况下,这包括Web验证。

现在有几种方法可以在应用程序中自定义资源处理-您可以使用各种spring.resources.*配置键,或者添加实现WebFluxConfigurer并覆盖addResourceHandlers方法的自己的配置类

答案 1 :(得分:2)

感谢@M。 Deinum和@Brian Clozel 这是我需要同时具有百里香和验证功能的自定义配置类

@Configuration
@EnableWebFlux
public class WebFluxConfig implements WebFluxConfigurer {

    @Resource
    private ThymeleafReactiveViewResolver thymeleafReactiveViewResolver;

    @Autowired
    private Validator defaultValidator;

    @Override
    public Validator getValidator() {
        return defaultValidator;
    }

    @Override
    public void configureViewResolvers(final ViewResolverRegistry registry) {
        registry.viewResolver(thymeleafReactiveViewResolver);
    }

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/")
                .resourceChain(false);
    }
}