2015-04-19 155 views
1

我製作了一個REST客戶端服務器,並且一切工作正常或多或少。這就是困境:我有一個選擇可以通過用戶名來檢索用戶,當用戶真正存在時它可以正常工作。然而,當他沒有時,我得到204個http代碼,這很好,因爲我做了一個空歸零。我想我的方法返回一個普通的字符串到客戶端控制檯,當沒有用戶被發現,說:「沒有這樣的用戶發現...」,但方法返回類型是用戶(類)邏輯,以返回一個用戶對象時被發現。 下面是服務器端:REST服務返回

@GET 
    @Path("/{uName}") 
    @Produces({ "application/json", "application/xml"}) 
    public User getUserByUsername(@PathParam("uName") String uName) { 

     returnAll = usrList.getUsers(); 

     for (User u : returnAll) { 
      if (u.getUserName().equals(uName)) 
       return u; 
     } 

     return null; 
    } 

這裏是客戶端的相關部分:

 case 3: 
      sc.nextLine(); 
      System.out.println("Enter username"); 
      userName = sc.nextLine(); 

      restConnect("http://localhost:8080/rest/user/" 
        + userName, "GET"); 

      promptKey(); 

更改爲返回一個字符串類型顯然會擾亂代碼時,用戶實際上找到了一個方法。我能做些什麼來使兩種類型的返回功能?謝謝

編輯: 當用戶被發現時,我的方法將返回列表中的第一個用戶get(0)這是錯誤的。這是我的殘留檢測與ID的

EDITx2東西:工作客戶

當錯誤
 case 3: 
      sc.nextLine(); 
      System.out.println("Enter username"); 
      userName = sc.nextLine(); 

      try{ 
      restConnect("http://localhost:8080/rest/user/" 
        + URLEncoder.encode(userName, "UTF-8"), "GET"); 
      } 
      catch(RuntimeException e){ 
       System.out.println("No such user..."); 
      } 
      promptKey(); 
+0

爲什麼不拋出異常和HTTP狀態說500?或者爲什麼不使用NullObjectPattern並返回dummy用戶呢? – SMA

+0

因爲我想要一個用戶友好的信息:) – Norgul

回答

1

當用戶不存在,客戶端應該有一個分支你的代碼應該返回4xx錯誤返回。

想想事情應該如何爲一個你自己沒有發展起來的客戶起作用,API的定義可能會更清晰。

查看http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html瞭解更多結果代碼的詳細信息。

+0

我在客戶端部分做了一個try/catch塊,它捕獲一個運行時異常。它現在正如我所願,但是,這是一個好方法嗎? – Norgul

+0

如果'''restConnect'''在返回4xx錯誤時拋出異常,那麼是的,這就是你想要的。 –