ПРИЛОЖЕНИЕ НЕ ЗАПУСКАЕТСЯ
Описание:
Параметр 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
Можете ли вы поделиться своим файлом pom или gradle?




Вы можете попробовать вот так:
compile ('org.springframework.cloud:spring-cloud-starter-gateway'){
exclude module : 'spring-cloud-starter'
exclude module : 'spring-boot-starter-webflux'
}
Привет, я новичок в Spring. Куда мне добавить приведенный выше код?
Ответ относится к системе сборки gradle, вы должны внести изменения в файл с именем build.gradle. Если вы используете mavin, вам придется внести изменения в свой pom.xml и использовать инструкцию <exclusion>.
Попробуйте добавить приведенный ниже код. Это сработало для меня
@Bean
public ServerCodecConfigurer serverCodecConfigurer() {
return ServerCodecConfigurer.create();
}
Это сработало для меня, но только для настройки базовой безопасности на шлюзе. Мне все еще нужно было позже заменить spring-boot-start-web на spring-boot-start-webflux. Для всех, кто интересуется, есть хорошие образцы кода на Весенний блог
У меня была такая же проблема при создании весенней облачной версии 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.
Это может быть связано с тем, что вы включаете jar-файл spring-boot-start-web через облачный шлюз Spring, вместо этого используйте spring-boot-starter-webflux. Поэтому удаление spring-boot-start-web может решить проблему.