diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfiguration.java index fbe2b3ce0b6..cabb7ace0d9 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfiguration.java @@ -79,11 +79,11 @@ public class JerseyAutoConfiguration implements WebApplicationInitializer { @PostConstruct public void path() { - if (StringUtils.hasLength(this.jersey.getPath())) { - this.path = parsePath(this.jersey.getPath()); + if (StringUtils.hasLength(this.jersey.getApplicationPath())) { + this.path = parseApplicationPath(this.jersey.getApplicationPath()); } else { - this.path = findPath(AnnotationUtils.findAnnotation(this.config.getClass(), + this.path = findApplicationPath(AnnotationUtils.findAnnotation(this.config.getClass(), ApplicationPath.class)); } } @@ -145,17 +145,15 @@ public class JerseyAutoConfiguration implements WebApplicationInitializer { servletContext.setInitParameter("contextConfigLocation", ""); } - private static String findPath(ApplicationPath annotation) { + private static String findApplicationPath(ApplicationPath annotation) { // Jersey doesn't like to be the default servlet, so map to /* as a fallback if (annotation == null) { return "/*"; } - String path = annotation.value(); - - return parsePath(path); + return parseApplicationPath(annotation.value()); } - private static String parsePath(String applicationPath) { + private static String parseApplicationPath(String applicationPath) { if (!applicationPath.startsWith("/")) { applicationPath = "/" + applicationPath; } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyProperties.java index 1a81cfcf477..1bfcf2f0266 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyProperties.java @@ -44,9 +44,10 @@ public class JerseyProperties { private Filter filter = new Filter(); /** - * Path at which the application will be available. + * Path that serves as the base URI for the application. Overrides + * the value of "@ApplicationPath" if specified. */ - private String path; + private String applicationPath; public Filter getFilter() { return this.filter; @@ -72,12 +73,12 @@ public class JerseyProperties { this.init = init; } - public String getPath() { - return this.path; + public String getApplicationPath() { + return this.applicationPath; } - public void setPath(String path) { - this.path = path; + public void setApplicationPath(String applicationPath) { + this.applicationPath = applicationPath; } public enum Type { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfigurationWithoutApplicationPathTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfigurationWithoutApplicationPathTests.java index 17f449960ff..f28645ba343 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfigurationWithoutApplicationPathTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfigurationWithoutApplicationPathTests.java @@ -28,6 +28,7 @@ import javax.ws.rs.Path; import org.glassfish.jersey.server.ResourceConfig; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; @@ -53,7 +54,7 @@ import static org.junit.Assert.assertEquals; */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(Application.class) -@IntegrationTest({ "server.port=0", "spring.jersey.path=/rest" }) +@IntegrationTest({ "server.port=0", "spring.jersey.application-path=/api" }) @WebAppConfiguration public class JerseyAutoConfigurationWithoutApplicationPathTests { @@ -65,7 +66,7 @@ public class JerseyAutoConfigurationWithoutApplicationPathTests { @Test public void contextLoads() { ResponseEntity entity = this.restTemplate.getForEntity( - "http://localhost:" + this.port + "/rest/hello", String.class); + "http://localhost:" + this.port + "/api/hello", String.class); assertEquals(HttpStatus.OK, entity.getStatusCode()); } diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index c64e6c69386..bee30dea653 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -282,6 +282,7 @@ content into your application; rather pick only the properties that you need. spring.mustache.view-names= # whitelist of view names that can be resolved # JERSEY ({sc-spring-boot-autoconfigure}}/jersey/JerseyProperties.{sc-ext}[JerseyProperties]) + spring.jersey.application-path # path that serves as the base URI for the application spring.jersey.type=servlet # servlet or filter spring.jersey.init= # init params spring.jersey.filter.order=