종속성 주입을 위해 jersey와 guice를 함께 사용하여 REST API를 작성했습니다. 모든 기능이 훌륭하게 작동하며 FEATURE_CANONICALIZE_URI_PATH 및 FEATURE_NORMALIZE_URI이 (가) 켜져 있고 거의 모든 경우에 슬래시가 처리됩니다. 예를 들어 :jersey와 guice를 사용하여 URL 시작 부분에 여분의 슬래시를 처리 할 수있는 방법이 있습니까?
http://localhost:8080/my_service/param1//param2
문제는 내가 (서비스 경로 전에) URL의 시작 부분에 슬래시를 처리 할 수있는 적절한 방법을 정렬 할 수 있습니다. 이처럼 :
web.xml을
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>MyServletConfig</listener-class>
</listener>
MyServletConfig.java
public class MyServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new JerseyServletModule() {
@Override
protected void configureServlets() {
bind(MyService.class);
guiceContainerConfig.put(ResourceConfig.FEATURE_NORMALIZE_URI, "true");
guiceContainerConfig.put(ResourceConfig.FEATURE_CANONICALIZE_URI_PATH, "true");
serve("/*").with(GuiceContainer.class, guiceContainerConfig);
}
});
}
}
MyService.java
을 :http://localhost:8080//my_service/param1/param2
이것은 내가 물건은 현재 설정 한 방법입니다
@Path("/")
public class MyService {
@GET
@Path("/{param1}/{param2}")
@Produces("application/json")
public String get(
@PathParam("param1") final String param1,
@PathParam("param2") final String param2) {
return "{\"param1\":\"" + param1 + "\"}";
}
}
필터 매핑의 URL 매핑과 일치하지 않기 때문에 서비스 이름 앞에있는 // 요청이 실제 서블릿에 의해 처리되지 않는다는 것이 문제라는 것을 알 수 있습니다. 꼭 맞는 솔루션은 아닙니다. 그 URL이 서블릿과 일치하기 전에 URL 재 작성을해야합니까, 아니면 요청 URL을 매핑하는 더 좋은 방법이 있습니까?