Spring Cloud Gateway 报错 BindException Failed to bind properties under ‘’ to x.xx.xxx.XXXFactory$Config的解决方案
无论是自定义路由断言工厂类:
/* import */
/**
* 自定义路由断言工厂类
* @author Ordinary
*/
@Component
public class AgeRoutePredicateFactory extends AbstractRoutePredicateFactory<AgeRoutePredicateFactory.Config> {
public AgeRoutePredicateFactory() {
super(Config.class);
}
@Override
public List<String> shortcutFieldOrder() {
return List.of("minAge", "maxAge");
}
@Override
public Predicate<ServerWebExchange> apply(Config config) {
return serverWebExchange -> {
String ageStr = serverWebExchange.getRequest().getQueryParams().getFirst("age");
if (StringUtils.isNotEmpty(ageStr)) {
int age = Integer.parseInt(ageStr);
return age >= config.minAge && age <= config.maxAge;
}
return false;
};
}
@Data
static class Config {
private int minAge;
private int maxAge;
}
}
/* import */
/**
* @author Ordinary
*/
@Slf4j
@Component
public class LogGatewayFilterFactory extends AbstractGatewayFilterFactory<LogGatewayFilterFactory.Config> {
public LogGatewayFilterFactory() {
super(Config.class);
}
@Override
public List<String> shortcutFieldOrder() {
return List.of("consoleLog", "cacheLog");
}
@Override
public GatewayFilter apply(Config config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
if (config.consoleLog) {
log.info("console log enabled.");
}
if (config.cacheLog) {
log.info("cache log enabled.");
}
return chain.filter(exchange);
}
};
}
@Data
static class Config{
/* 在这个位置加上static */
private boolean consoleLog;
private boolean cacheLog;
}
}
只需要在Config内部类上加上static
,使其成为一个内部静态类,优先于Factory加载即可。