Bean-компонент типа org.springframework.http.codec.ServerCodecConfigurer, который не может быть найден

ПРИЛОЖЕНИЕ НЕ ЗАПУСКАЕТСЯ


Описание:

Параметр 0 метода modifyRequestBodyGatewayFilterFactory в org.springframework.cloud.gateway.config.GatewayAutoConfiguration требовал bean-компонента типа 'org.springframework.http.codec.ServerCodecConfigurer', который не удалось найти.

Действие:

Рассмотрите возможность определения bean-компонента типа 'org.springframework.http.codec.ServerCodecConfigurer' в вашей конфигурации.

Подобрал JAVA_TOOL_OPTIONS: -agentlib: jvmhook
Подобраны _JAVA_OPTIONS: -Xbootclasspath / a: "C: \ Program Files (x86) \ HPE \ Unified Functional Testing \ bin \ java_shared \ classes \ jasmine.jar"
Подобрал JAVA_TOOL_OPTIONS: -agentlib: jvmhook

Это может быть связано с тем, что вы включаете jar-файл spring-boot-start-web через облачный шлюз Spring, вместо этого используйте spring-boot-starter-webflux. Поэтому удаление spring-boot-start-web может решить проблему.

liyj144 25.10.2018 09:47

Можете ли вы поделиться своим файлом pom или gradle?

javaPlease42 27.02.2019 19:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
2
14 670
5

Ответы 5

Вы можете попробовать вот так:

  compile ('org.springframework.cloud:spring-cloud-starter-gateway'){
        exclude module : 'spring-cloud-starter'
        exclude module : 'spring-boot-starter-webflux'
    }

Привет, я новичок в Spring. Куда мне добавить приведенный выше код?

Neo 05.01.2021 16:51

Ответ относится к системе сборки gradle, вы должны внести изменения в файл с именем build.gradle. Если вы используете mavin, вам придется внести изменения в свой pom.xml и использовать инструкцию <exclusion>.

Dave 10.04.2021 18:35

Попробуйте добавить приведенный ниже код. Это сработало для меня

@Bean
public ServerCodecConfigurer serverCodecConfigurer() {
   return ServerCodecConfigurer.create();
}

Это сработало для меня, но только для настройки базовой безопасности на шлюзе. Мне все еще нужно было позже заменить spring-boot-start-web на spring-boot-start-webflux. Для всех, кто интересуется, есть хорошие образцы кода на Весенний блог

scruffy 27.12.2020 18:34

У меня была такая же проблема при создании весенней облачной версии 2020.0.0 и Keycloak, похоже, что файлы jar Keycloak включают зависимость от spring-boot-start-web Указание maven НЕ включать spring-boot-start-web по умолчанию, как показано ниже, решило эту проблему.

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Но мне пришлось включить зависимость maven от банки servlet, чтобы разрешить некоторые другие требования Keycloak следующим образом:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
 </dependency>

Такая же проблема здесь, но решение с

@Bean
public ServerCodecConfigurer serverCodecConfigurer() {
   return ServerCodecConfigurer.create();
}

только спрятал проблему, и пусть приложение скомпилируется. В любом случае, почему-то мой шлюз не работал правильно. Он не пересылал, не регистрировал и не отвечал, если я запрашивал с определенными в yaml URL-адресами. Приложение только запустилось и все.

В моем случае проблема заключалась в зависимости от spring-boot-start-web. Случайно я не обнаружил этого, потому что в моей структуре проекта мой build.gradle наследуется «родителем», и этот родитель реализовал spring-boot-start-web в подпроектах.

Я удалил эту зависимость, и с тех пор запросы были перенаправлены правильно, и я увидел журналы. Затем я удалил @Bean с помощью ServerCodecConfigurer .

Надеюсь, это поможет кому-нибудь в такой же ситуации.

Конфигурация: Пружинный пыльник: 2.4.4
Весеннее облако: 2020.0.2

Для меня проблема заключалась в том, что я добавил зависимость:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>10.1.0-M4</version>
</dependency>

Обратите внимание, если вы используете Reactive Spring. Мне нужен был HttpServletRequest из этой зависимости, но теперь я использую ServerHttpRequest из org.springframework.http.server.reactive.

Другие вопросы по теме