Swagger SpringMVC 集成(无法加载@PostConstruct 方法)

Swagger SpringMVC Integration (Failed to load @PostConstruct method)

我正在尝试将 swagger-springmvc 0.9.5 与具有 XML 配置的 SpringMVC 3.2 项目集成。

我的应用-config.xml:

<beans xmlns="ht...

<context:annotation-config />
<mvc:annotation-driven>
    <mvc:message-converters>
        <bean id="messageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>


<context:component-scan base-package="com.myapp.info.v1.rest.endpoint"/>
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />


</beans>

我收到以下错误:

java.lang.NullPointerException
com.mangofactory.swagger.models.property.field.FieldModelPropertyProvider.propertiesForSerialization(FieldModelPropertyProvider.java:54)
com.mangofactory.swagger.models.property.provider.DefaultModelPropertiesProvider.propertiesForSerialization(DefaultModelPropertiesProvider.java:31)
com.mangofactory.swagger.models.DefaultModelProvider.properties(DefaultModelProvider.java:104)
com.mangofactory.swagger.models.DefaultModelProvider.modelFor(DefaultModelProvider.java:54)
com.mangofactory.swagger.readers.ApiModelReader.execute(ApiModelReader.java:70)
com.mangofactory.swagger.readers.ApiModelReader.execute(ApiModelReader.java:38)
com.mangofactory.swagger.core.CommandExecutor.execute(CommandExecutor.java:13)
com.mangofactory.swagger.scanners.ApiListingScanner.scan(ApiListingScanner.java:98)
com.mangofactory.swagger.core.SwaggerApiResourceListing.initialize(SwaggerApiResourceListing.java:72)
com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin.initialize(SwaggerSpringMvcPlugin.java:427)
...

开始调试,实现如下:

  1. objectMapper 为空
  2. setObjectMapper 从未被调用
  3. setup() 从未被调用,尽管它有 @PostConstruct 注释。

我发现了三个错误相同的帖子,但其中 none 似乎是相关的。 我忘记了什么吗?我是 SpringMVC 框架的新手。

旁注:我还尝试了 swagger-springmvc 0.6.6 并成功运行。

尝试更改您的配置以传入对象映射器的实例,看看是否有帮助

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean id="messageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" >
            <property name="objectMapper" ref="jacksonObjectMapper" />
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

<bean id="jacksonObjectMapper" class="[replace with default ObjectMapper or your custom subclass]" />

我们在 OSGi/蓝图驱动的环境中遇到了类似的问题。 出于某种原因 "touching" JacksonSwaggerSupporty bean 导致正确调用 PostConstruct 方法。 这不是很好 - 但一个可行的解决方法。在 OSGi 中设置我们的 swagger 和 spring 上下文的 bean 包含这个:

        // for some reason this line causes @PostConstruct to be called on bean correctly! 
    applicationContext.getBean(JacksonSwaggerSupport.class); // Do not remove!