diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ShortcutConfigurable.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ShortcutConfigurable.java index 5d8ee9f5..ec917fbe 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ShortcutConfigurable.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ShortcutConfigurable.java @@ -151,7 +151,7 @@ public interface ShortcutConfigurable { // strip boolean flag if last entry is true or false int lastIdx = values.size() - 1; String lastValue = values.get(lastIdx); - if (lastValue.equalsIgnoreCase("true") || lastValue.equalsIgnoreCase("false")) { + if ("true".equalsIgnoreCase(lastValue) || "false".equalsIgnoreCase(lastValue) || lastValue == null) { values = values.subList(0, lastIdx); map.put(fieldOrder.get(1), getValue(parser, beanFactory, lastValue)); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ShortcutConfigurableTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ShortcutConfigurableTests.java index 597de9ec..640f7d02 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ShortcutConfigurableTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ShortcutConfigurableTests.java @@ -182,6 +182,32 @@ public class ShortcutConfigurableTests { } } + @Test + public void testNormalizeGatherListTailFlagFlagIsNull() { + parser = new SpelExpressionParser(); + ShortcutConfigurable shortcutConfigurable = new ShortcutConfigurable() { + @Override + public List shortcutFieldOrder() { + return Arrays.asList("values", "flag"); + } + + @Override + public ShortcutType shortcutType() { + return ShortcutType.GATHER_LIST_TAIL_FLAG; + } + }; + Map args = new HashMap<>(); + args.put("1", "val0"); + args.put("2", "val1"); + args.put("3", "val2"); + args.put("4", null); + Map map = ShortcutType.GATHER_LIST_TAIL_FLAG.normalize(args, shortcutConfigurable, parser, + this.beanFactory); + assertThat(map).isNotNull().containsKey("values"); + assertThat((List) map.get("values")).containsExactly("val0", "val1", "val2"); + assertThat(map.get("flag")).isNull(); + } + @SpringBootConfiguration protected static class TestConfig {