Гсон и Джексон вызвали «метод обработки не найден для / restendpoint» в Spring MVC - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь добавить Swagger-UI в приложение Spring MVC. Все запросы и ответы 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.


    <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>

Мой вопрос: у кого-нибудь есть идея, почему Джексон и Гсон ведут себя так же в одном приложении? Или я что-то забыл или пропустил, чтобы Джексон не конвертировал мои запросы / ответы?

Я надеюсь, что смогу прояснить мою проблему подробно.

1 Ответ

0 голосов
/ 01 апреля 2019

После некоторых исследований я обнаружил, что Spring 4 автоматически использует Jackson, когда он добавляется в classpath. В моих конфигурационных файлах * .xml у меня было <mvc:annotation-driven/>. Это вызывало второй экземпляр RequestMappingHandlerAdapter с конвертерами Jackson по умолчанию без GsonHttpMessageConverter. Это было причиной, почему все мои RestEndpoints больше не работали должным образом, но Swagger работал.

Я перенес свой проект, чтобы использовать Джексона вместо Гсона, и решил свою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...