2014-04-08 5 views
5

Jersey 2.7에서 ResourceConfig를 사용하고 Tomcat 7에서 배포하면 web.xml에서 완전히 Java 구성으로 마이그레이션되었습니다. 이후 동일한 서비스를 사용하여 서비스에 연결할 수 없습니다. url을 web.xml 접근 방식과 함께 사용하고 있습니다. ResourceConfig가 경로에 어떤 영향을 미치는지 이해할 수 없습니다.web.xml없이 ResourceConfig를 사용하는 Jersey 응용 프로그램의 URL

내 이전의 web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
version="3.0"> 
<servlet> 
    <servlet-name>my.app</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.mypackage.resource,com.mypackage.providers</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.scanning.recursive</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>   
    </init-param> 
    <init-param> 
     <param-name>org.glassfish.jersey.server.ServerProperties.BV_SEND_ERROR_IN_RESPONSE</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>my.app</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
ResourceConfig를 확장

내 구성 클래스입니다 : 내 자원의

@ApplicationPath("") 
public class MyRESTAPIApp extends ResourceConfig{ 
    public MyRESTAPIApp() { 
     packages("com.mypackage.resource", "com.mypackage.providers"); 
     register(org.glassfish.jersey.filter.LoggingFilter.class); 
     property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true"); 
    } 
} 

하나입니다

MyRESTAPIApp.java :

,363,210

FlagResource.java

@Path("my-resource") 
public class FlagResource { 
private MyService myService = new MyService(); 

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public FlagResource getFlagResource(@NotNull @QueryParam("level") Long level) { 
    FlagResource flagResource = myService.getFlagResource(level); 
    return flagResource; 
} 

}

나가라고 생성하고 전쟁 : my.app.war.

Tomcat은 평소와 같이 war 파일의 이름에서 웹 컨텍스트 루트 경로를 사용하고 있었지만 Java 코드 기반 구성을 사용할 때 변경되는지 여부는 알 수 없습니다.

GET http://localhost:8080/my.app/my-resource?level=1 

404

답변

7

이 사실 나는 @ApplicationPath 주석의 값으로 "/"를 추가하여이를 해결 반환, 나는 API 문서는 @ApplicationPath 값 PARAM에 대해 다음 말한다 있기 때문에 필요하지라고 생각 :

Defines the base URI for all resource URIs. A trailing '/' character will be automatically appended if one is not present. 

빈 문자열을 남겨두면 @ApplicationPath ("/")를 사용하는 것과 같지만 그렇지 않은 것으로 간주합니다.

그래서이 구성 클래스는 지금 모습입니다 :

@ApplicationPath("/") 
public class MyRESTAPIApp extends ResourceConfig{ 
    public MyRESTAPIApp() { 
     packages("com.mypackage.resource", "com.mypackage.providers"); 
     register(org.glassfish.jersey.filter.LoggingFilter.class); 
     property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true"); 
    } 
} 
관련 문제