Поддержка проверки Swagger-Springfox + WebFlux + JavaX (JSR 303) - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь реализовать Swagger для документации, чтобы он выбирал как аннотации проверки JSR 303, так и классы на основе Spring Webflux.

В проекте Spring Boot я сейчас использую:

  1. Spring Webflux Framework для некоторых классов
  2. JSR 303 аннотации для классов доменов для валидации и ограничений бинов
  3. Интеграция Swagger со средой Spring Fox для создания документации OpenAPI.

В build.gradle используются следующие зависимости, и я могу заставить Spring Webflux + SpringFox работать, но проблемы возникают только в JSR 303:

springBootVersion = '2.0.2.RELEASE'

//JavaX-validation    
'javax.validation:validation-api:2.0.0.Final',    
'javax.el:javax.el-api:3.0.0',    
'org.glassfish.web:javax.el:2.2.6'

//SpringFox-Swagger    
'io.springfox:springfox-swagger2:2.9.2',    
'io.springfox:springfox-spring-webflux:3.0.0-SNAPSHOT',    
'io.github.swagger2markup:swagger2markup-gradle-plugin:1.3.3'

Вот вопрос:

Когда нижеуказанная зависимость добавляется для достижения "Spring Webflux + SpringFox + JSR 303" ,

**'io.springfox:springfox-bean-validators:2.9.2'**

Я получаю следующую ошибку,

[WARN ] 2018-11-01 10:16:50.535 [main] SpringApplication - Unable to close ApplicationContext    
java.lang.IllegalStateException: Failed to introspect Class 
             springfox.documentation.swagger2.configuration.Swagger2DocumentationConfiguration] from ClassLoader [sun.misc.Launcher$AppClassLoader@764c12b6]  

    at 
     org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:659) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE]    
         at 
     org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:556 ) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE]     
        at 
     org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.ge tTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:724) ~[spring- beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]    
         at 
     org.springframework.boot.SpringApplication.handleExitCode(SpringApplication.java:861) ~[spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]    
        at 
     org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:810) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]    
        at 
     org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]     
     Caused by: java.lang.NoClassDefFoundError: 
     org/springframework/web/servlet/HandlerMapping
        at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_92]
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[?:1.8.0_92]
        at java.lang.Class.getDeclaredMethods(Unknown Source) ~[?:1.8.0_92]
        at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:641) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE]
        ... 20 more            
    Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.HandlerMapping
        at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_92]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_92]

В некоторых блогах говорится, что SpringBoot версии 2x не поддерживает JSR 303. Я не уверен, но я пытался понять, что это не работает.

Пожалуйста, сообщите.

Кроме того, если JSR 303 в настоящее время не поддерживается, какие другие аннотации проверки можно использовать помимо JSR 303? Я не хочу использовать аннотации ядра Swagger только потому, что они портят читабельность кода.

1 Ответ

0 голосов
/ 01 ноября 2018

Официально springfox не поддерживает spring webflux (дополнительную информацию вы можете прочитать здесь: проблемы с springfox ). Но вы можете попробовать версию SNAPSHOT следующим образом: webflux-swagger .

Как я вижу, версия больше, чем 2.3.2, поддержка аннотаций проверки компонентов: pringfox-support-for-jsr-303 .

...