Jersey url映射错误

时间:2014-05-01 02:22:37

标签: java web-applications jersey web.xml jersey-1.0

我有一个具有以下文件夹结构的Web应用程序

ProjectName 
     |.. src/main/java
       |.. folder1
         |.. restEndpoint1.java , restendpoint2.java etc 

,restendpoint1.java就像

@Path("/static1/static2")
public class DoStuff {

@POST
@Path("/static3")
@Consumes(MediaType.APPLICATION_XML)
@Produces("application/xml")
public Response validation(String inputXML){

我的web.xml是:

<servlet>
        <servlet-name>jersey-servlet</servlet-name>
        <servlet-class>
            com.sun.jersey.spi.container.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>folder1</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-servlet</servlet-name>
        <url-pattern>/folder1/*</url-pattern>
    </servlet-mapping>

哪个会成为我的网址

http:\\localhost:port/projectName/foldername/{restendpoint1.path}

有没有办法可以从映射中删除foldername,以便我可以进行映射

localhost:port/projectName/{restendpoint1.path}

如何操作我的web.xml来实现这一目标。

我需要这样做的原因是,我需要文件夹结构来确保代码的可维护性(而不是将所有内容分组到一个类中并使web.xml映射到该类)但我也必须避免获取映射中的foldername

1 个答案:

答案 0 :(得分:2)

请勿将folder1放入url-pattern。您已将folder1放入正在扫描服务的软件包中。通过将folder1放入url-pattern,您表明您希望它位于网址中。把你想要的URL放在那里。所以

<servlet-mapping>
     <servlet-name>jersey-servlet</servlet-name>
     <url-pattern>/*</url-pattern>
</servlet-mapping>

这应该让所有电话都转到你的休息服务。但是,您可能应该在其中放置一些路径,因为您不希望将所有URL映射到REST服务(因为将存在其他不是REST服务的URL)。也许像是

<servlet-mapping>
     <servlet-name>jersey-servlet</servlet-name>
     <url-pattern>/services/*</url-pattern>
</servlet-mapping>