【问题标题】:Swagger SpringMVC Integration (Failed to load @PostConstruct method)Swagger SpringMVC 集成(无法加载@PostConstruct 方法)
【发布时间】:2015-02-20 12:38:34
【问题描述】:

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

我的 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 为空
  2. 永远不会调用 setObjectMapper
  3. setup() 永远不会被调用,尽管它有 @PostConstruct 注解。

我发现了三个具有相同错误的帖子,但它们似乎都不相关。 我是不是忘记了什么?我是 SpringMVC 框架的新手。

旁注:我还尝试了 swagger-springmvc 0.6.6 并设法让它工作。

【问题讨论】:

  • 对于初学者,为什么需要消息转换器?尝试删除它,看看它是否有帮助
  • 它也不适用于
  • 更新后,objectMapper 的值似乎需要是 bean 的 ref 或内联 bean。 value=classpath*... 绝对不对。它还需要是ObjectMapper 的实例。

标签: spring api spring-mvc swagger


【解决方案1】:

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

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

【讨论】:

  • 感谢您的快速回复!我用更多信息编辑了我的问题,并包含了我的 mapper.xml 文件。仍在努力连接 objectMapper。有什么想法吗?
  • 如果我引用 &lt;bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" /&gt; 我会得到相同的 NullPointerException。我还能尝试什么?
【解决方案2】:

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

【讨论】:

  • 太棒了。感谢您的回答,这帮助我找到了解决方案。这适用于我的 XML 配置:&lt;bean class="com.mangofactory.swagger.configuration.JacksonSwaggerSupport" init-method="setup" /&gt;
猜你喜欢
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2015-02-21
  • 2020-05-06
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
相关资源
最近更新 更多