Gson和Jackson在春季MVC中引起了'no handler method found for /restendpoint'



我正在尝试在Spring MVC应用程序中添加Swagger-UI。org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter的所有请求和响应都由gson 2.6.1序列化(请参阅以下代码)。

当我尝试集成 Swagger 时,我必须添加以下依赖项:


    <!-- json request -->       
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.9.7</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.7</version>
    </dependency>
    <!--swagger-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>

Swagger的集成运行良好,但我的一些要求被打破了。我收到AbstractHandlerMethodMapping: 302 - Did not find handler method for /....我猜杰克逊和格森以这种方式不兼容。当我删除 jackson.core 依赖项时,一切正常。

项目中,绝对需要使用 Gson,我们也在 spring 的应用程序上下文中设置了 Gson。


    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jsonConverter" />
            </list>
        </property>
    </bean>
    <bean id="gsonBuilder" class="com.google.gson.GsonBuilder" init-method="serializeNulls" />
    <bean id="jsonConverter" class="org.springframework.http.converter.json.GsonHttpMessageConverter">
        <property name="supportedMediaTypes" value="application/json" />
        <property name="gson">
            <bean class="com.google.gson.Gson" factory-bean="gsonBuilder"
                factory-method="create" />
        </property>
    </bean>

我的问题是,有人知道为什么杰克逊和gson在同一个应用程序中表现得像这样吗?还是我忘记或错过了什么,以避免杰克逊转换我的请求/响应?

我希望我能详细澄清我的问题。

经过一些研究,我发现 Spring 4 在添加到类路径时会自动使用 Jackson。在我的 *.xml 配置文件中,我有<mvc:annotation-driven/>.它导致使用默认Jackson转换器的第二个RequestMappingHandlerAdapter实例,而没有GsonHttpMessageConverter。这就是为什么我所有的 RestEndpoint 都无法正常工作的原因,但 Swagger 做到了。

我将我的项目迁移到使用 Jackson 而不是 Gson,我解决了我的问题。

相关内容

最新更新