解决springboot⽹关gateway导致的坑,⽆法下载⽂件问题
话不多说,直接上图
接⼝返回内容,浏览器显⽰PDF⽂档。但是输⼊接⼝地址以后⼀直提⽰这个
核对接⼝路径也是正确的,并且没有报错提⽰,后⾯发现是⽹关没有配置放⾏路径,于是进⾏了补充
所以以后对于前端请求统⼀由⽹关进⾏配置处理的,⼀定要对于静态资源合理配置,或者对于放⾏接⼝要统⼀补充进来(最后统⼀⼀下下接⼝前缀名称,这样就只需要写⼀个了)
下⾯我再说⼀个坑:
spring cloud gateway启动报错:org.springframework.fig.GatewayAutoConfiguration
springcloud 启动⼀直报错详细错误信息
Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.fig.GatewayAutoConfiguration required a bean of type
'org.dec.ServerCodecConfigurer' that could not be found.
Action:
springcloud和springbootConsider defining a bean of type 'org.dec.ServerCodecConfigurer' in your configuration.
解决办法
将pom⽂件中的spring-boot-starter-web 移除
详细分析
点进去 GatewayAutoConfiguration 这个类
@Bean
public ModifyRequestBodyGatewayFilterFactory modifyRequestBodyGatewayFilterFactory(ServerCodecConfigurer codecConfigurer) {
return new Readers());
}
@Bean
public DedupeResponseHeaderGatewayFilterFactory dedupeResponseHeaderGatewayFilterFactory() {
return new DedupeResponseHeaderGatewayFilterFactory();
}
@Bean
public ModifyResponseBodyGatewayFilterFactory modifyResponseBodyGatewayFilterFactory(ServerCodecConfigurer codecConfigurer, Set<MessageBodyDecoder> bodyDecoders, Set<MessageBodyEncoder> bodyEncoders) {
return new Readers(), bodyDecoders, bodyEncoders);
}
确实需要这个bean
spring cloud gateway server项⽬是⼀个spring boot项⽬,在启动的时候会去加载它的配置,其中有⼀个叫做GatewayClassPathWarningAutoConfiguration的配置类代码⼊下
@Configuration(
proxyBeanMethods = false
)
//在 GatewayAutoConfiguration 执⾏执⾏
@AutoConfigureBefore({GatewayAutoConfiguration.class})
public class GatewayClassPathWarningAutoConfiguration {
private static final Log log = Log(GatewayClassPathWarningAutoConfiguration.class);
private static final String BORDER = "\n\n**********************************************************\n\n";
public GatewayClassPathWarningAutoConfiguration() {
}
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnMissingClass({"org.active.DispatcherHandler"})
protected static class WebfluxMissingFromClasspathConfiguration {
public WebfluxMissingFromClasspathConfiguration() {
GatewayClassPathWarningAutoConfiguration.log.warn("\n\n**********************************************************\n\nSpring Webflux is missing from the classpath, which is required for Spring Cloud Gateway at this time. Please add spring-boot-starter-webf }
}
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass(
name = {"org.springframework.web.servlet.DispatcherServlet"}
)
protected static class SpringMvcFoundOnClasspathConfiguration {
public SpringMvcFoundOnClasspathConfiguration() {
GatewayClassPathWarningAutoConfiguration.log.warn("\n\n**********************************************************\n\nSpring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time. Please remove spring-boot-starter-web dep }
}
}
我们pom中依赖了spring-boot-starter-web 也就是存在
org.springframework.web.servlet.DispatcherServlet
此时这个与Spring Cloud Gateway不兼容
spring cloud gateway是基于webflux的,如果需要web⽀持的话需要导⼊spring-boot-starter-webflux取
代spring-boot-start-web。以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论