2017-04-11 21 views
0

我非常絕望和厭倦。 我的問題如下: 我爲我正在爲學校工作的一個項目創建了一個REST服務。在那裏我有幾個請求,它們根據路徑變量與我的數據庫進行交互。美中不足的是,我不能要求的東西超過9價值爲進一步說明,我的意思,我已經複製下面的代碼片段:Java REST - 當超過值時,路徑變量會導致404 12

@GET 
@Path("/Child/{Child: \\d+}") 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
public Response Child(@PathParam ("Child")int child) throws IOException{ 
    DAO dao = new DAO(); 
    List<Child> Child; 
    try{ 
     Child = dao.Child(child); 
     ResponseBuilder rb = Response.ok(); 
     rb.entity(new GenericEntity<List<Child>>(Child) {}); 

     return rb.build(); 

    }catch(Exception e){ 
     ResponseBuilder rp = Response.status(404); 
     return rp.build(); 
    } 

} 

而是與匹配的索引返回Child對象(它存在,我已經多次查看,如果我真的不只是忽視這個顯而易見的話),它會返回一個404代碼。它甚至沒有捕獲異常,因爲我已經更改了響應代碼,並且它仍然返回相同的結果。我也試圖自定義變量(如上面用\ d +所看到的那樣,還有各種其他表達式,但它們都沒有工作)。我在網上搜索了答案,但沒有找到答案能夠幫助我。如果需要更多信息,我很樂意提供。

+0

只是要清楚,如果ID是超過9它返回404.不是嗎? –

+0

如果刪除param中冒號後的空格是否有任何變化?另外,哪個容器和JAXRS庫是這樣的(假設這是你正在使用的? –

+0

嘗試用'[0-9] +'替換正則表達式'\\ d +',以防萬一。 – streetturtle

回答

0

據我所知,你需要路徑變量中的任何數字,它也可以大於9。嘗試下面。在非數字值的情況下,下面將給出404,所以你不需要在你的方法中處理它。

@GET 
    @Path("/Child/{Child:[0-9]+}") 
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
    public Response Child(@PathParam("Child") int child) throws IOException { 
     return Response.status(200).build(); 
    } 
+0

我剛起牀,我試了一下表達式,你用過了,它工作了!所以感謝你的幫助:DI現在感覺很愚蠢,我猜應該早點睡了。 – Naldorenses

0

你的問題在別的地方。這就像一個冠軍對我來說:

@Path("/server/{server: \\d+}") 
public class Restful { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public Response getText(@PathParam("server") int pid) { 
     return Response.status(200).build(); 
    } 
} 

servlet映射:

<servlet-mapping> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

URL中使用:

http://localhost:8080/restfulServer/rest/server/200 

在Tomcat 8.5和球衣

相關問題