2012-06-26 1 views
1

종속성 주입을 위해 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을 매핑하는 더 좋은 방법이 있습니까?

답변

관련 문제