From d8b9685635da8d86eb75e6ea4b7b07c9318a19d0 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 15 Oct 2018 09:37:44 -0700 Subject: [PATCH] Support '.' in endpoint names Update the `EndpointId` constraints to allow '.' in names. Closes gh-14773 --- .../boot/actuate/endpoint/EndpointId.java | 12 ++++++------ .../boot/actuate/endpoint/EndpointIdTests.java | 8 ++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointId.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointId.java index bb52d75bf93..a0c9cf80157 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointId.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointId.java @@ -22,16 +22,16 @@ import java.util.regex.Pattern; import org.springframework.util.Assert; /** - * An identifier for an actuator endpoint. Endpoint IDs may contain only letters and - * numbers and must begin with a lower-case letter. Case is ignored when comparing - * endpoint IDs. + * An identifier for an actuator endpoint. Endpoint IDs may contain only letters, numbers + * and {@code '.'}. They must begin with a lower-case letter. Case is ignored when + * comparing endpoint IDs. * * @author Phillip Webb * @since 2.0.6 */ public final class EndpointId { - private static final Pattern ALPHA_NUMERIC = Pattern.compile("[a-zA-Z0-9]+"); + private static final Pattern VALID_CHARS = Pattern.compile("[a-zA-Z0-9\\.]+"); private final String value; @@ -39,8 +39,8 @@ public final class EndpointId { private EndpointId(String value) { Assert.hasText(value, "Value must not be empty"); - Assert.isTrue(ALPHA_NUMERIC.matcher(value).matches(), - "Value must be alpha-numeric"); + Assert.isTrue(VALID_CHARS.matcher(value).matches(), + "Value must be alpha-numeric or '.'"); Assert.isTrue(!Character.isDigit(value.charAt(0)), "Value must not start with a number"); Assert.isTrue(!Character.isUpperCase(value.charAt(0)), diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EndpointIdTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EndpointIdTests.java index 85c95bd69ee..eceb468071e 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EndpointIdTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EndpointIdTests.java @@ -74,6 +74,14 @@ public class EndpointIdTests { EndpointId.of("Foo"); } + @Test + public void ofWhenContainsDotIsValid() { + // Ideally we wouldn't support this but there are existing endpoints using the + // pattern. See gh-14773 + EndpointId endpointId = EndpointId.of("foo.bar"); + assertThat(endpointId.toString()).isEqualTo("foo.bar"); + } + @Test public void equalsAndHashCode() { EndpointId one = EndpointId.of("foobar");