2014-09-08 2 views
0

Я пытаюсь передать PathParams в GET запросах на мой веб-сервис. Вот основные служба:Джерси с PathParams

@Path("/") 
public class MyService { 

    @GET 
    @Produces 
    public String getIntentClassIds() { 
     return "this works fine"; 
    } 

    @GET 
    @Path("/{x}") 
    @Produces 
    public String getIntentClassById(@PathParam("x") String intentClassId) { 
     return "This does not work"; 
    }  
} 

Мой web.xml выглядит следующим образом:

<servlet> 
    <servlet-name>MyService API</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>com.mypackagename</param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>MyService API</servlet-name> 
    <url-pattern>/MyService</url-pattern> 
</servlet-mapping> 

Когда я просто позвонить моей службы, как это:

localhost:8080/MyService возвращает this works fine, как ожидалось. Но когда я пытаюсь передать параметры следующим образом: localhost:8080/MyService/pathParam он выбрасывает 404. Любые подсказки?

ответ

1

стараются не объявлять MyService в web.xml, просто объявить Jersy диспетчеру, и в классе объявить службу:

не испытанный

@Path("/MyService") 
public class MyService { 

    @GET 
    @Produces 
    @path("getIntentClassIds") 
    public String getIntentClassIds() { 
     return "this works fine"; 
    } 

    @GET 
    @Path("getIntentClassById/{x}") 
    @Produces 
    public String getIntentClassById(@PathParam("x") String intentClassId) { 
     return "This does not work"; 
    } 

} 

web.xml не должны иметь mappi нг к вашему MyService услуг: должен выглядеть следующим образом

<servlet> 
    <servlet-name>MyService API</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>com.mypackagename</param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>MyService API</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

имеют вид here для получения дополнительной информации

0

Я не думаю, что вам нужно слеш здесь:

@Path("/{x}") 

изменения это:

@Path("{x}") 
+0

К сожалению, это не сработало. –

0

Если у вас есть @Path("/") на уровне класса, я думаю, что вам не нужно на уровне метода любой Больше.

Который только делает это как

localhost:8080/MyService/(/ -> this is at service class level)[If you keep another here ; I think it cannot parse]pathParam

+0

Извините, я просто попробовал это. Не повезло. –

0

Используйте это:

<url-pattern>/MyService/*</url-pattern> 

в вашем web.xml.

Вызывающий URL будет /MyService/something/dosomemore

И в файле Java,

@Path("/something") 
public class MyService { 

    @GET 
    @Produces 
    public String getIntentClassIds() { 
     return "this works fine"; 
    } 

    @GET 
    @Path("/dosomemore") 
    @Produces 
    public String getIntentClassById(@PathParam("x") String intentClassId) { 
     return "This does not work"; 
    }  
} 
Смежные вопросы