2016-07-08 3 views
0

Можем ли мы иметь пустой базовый путь для аннотации @Path? т.е. @Path ("/")Можем ли мы иметь пустую базовую дорожку?

Я хочу, чтобы обеспечить REST API http://servername/abc

@Path("") 
public class YourResource { 

    @Path("/abc") 
    @GET 
    public Responce method1(){ 
    return Response.ok("ok").build(); 
    } 

} 

Когда я делаю это, исключение

javax.ws.rs.WebApplicationException на com.sun. jersey.server.impl.uri.rules.TerminatingRule.accept (TerminatingRule.java:66) at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept (ResourceClassRule.java:108) at com. sun.jersey.server.impl.uri.rules.RightHandPathRule.accept (RightHandPathRule.java:147)

UPDATE - Я связываю в моей GuiceServletContextListener как ниже

связывания (YourResource.class) .in (Singleton.class);

служить ("/ abc"). (GuiceContainer.class);

+1

Конечно. Оставьте базовый путь полностью пустым, и вы получите то, что хотите. – Christian13467

+0

Я пробовал @Path (""), и все еще получаю ту же ошибку выше –

ответ

0

Удалить @Path("/") аннотаций полностью из класса

и

префикс слэш (/) в пути аннотацию уровня метод, как @Path("/abc")

Пожалуйста, проверьте ли ваш URI является сопоставлен с методом java, как показано ниже.

При запуске сервера, вы можете увидеть, как адреса URI отображается в методы Java, что-то вроде этого в затмения консоли ...

Mapped "{[/static/transit],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.util.List<com.xxx.yyy.zzz.domain.Transit> com.xx.yy.zz.controller.abcDataController.getAllTransit()

======== ================================================== ========

UPDATE:

по java doc ниже, Есть без разницы между этими двумя примерами, оба будут работать. Либо вы можете использовать ведущий слэш как URIs или не используйте ведущий слэш как URIs, оба же.

Пути относительные. Для аннотированного класса базовый URI представляет собой путь приложения , см. ApplicationPath. Для аннотированного метода базовый URI является эффективным URI содержащего класса. Для целей абсолютизации абсолютного пути к базовому URI ведущий «/» в пути игнорируется, а базовые URI обрабатываются так, как если бы они заканчивались в '/'.

@Path("message") 

public class MessageServices { 

    @PUT 
    @Path("sendsms") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces({MediaType.APPLICATION_JSON}) 
    public Response sendSms() { 
     //.... 
    } 

} 

ИЛИ

@Path("/message") 
public class MessageServices { 

    @PUT 
    @Path("/sendsms") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces({MediaType.APPLICATION_JSON}) 
    public Response sendSms() { 
     //.... 
    } 

} 
+0

Я пробовал это. Я получаю это исключение. "com.sun.jersey.api.NotFoundException: null для uri: http: // localhost: 8080/abc /" –

+0

Можете ли вы опубликовать свой последний код? –

+0

Можете ли вы попробовать как @Path ("/ test") на уровне класса и @Path ("/ abc") на уровне метода? и использовать uri: localhost: 8080/test/abc –

Смежные вопросы