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

时间:2015-02-20 12:38:34

标签: spring api spring-mvc swagger

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

我的app-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为null
  2. 永远不会调用setObjectMapper
  3. 永远不会调用
  4. setup(),尽管它有@PostConstruct注释。
  5. 我发现三个帖子有相同的错误,但似乎没有一个相关。 我忘记了什么吗?我是SpringMVC框架的新手。

    旁注:我还尝试了swagger-springmvc 0.6.6,并设法让它发挥作用。

2 个答案:

答案 0 :(得分:2)

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

<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]" />

答案 1 :(得分:1)

我们在OSGi /蓝图驱动的环境中遇到了类似的问题。 出于某种原因&#34;触摸&#34; 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!