2017-01-09 65 views
0

狀態 在下面的代碼中,您可以看到2個REST服務都應該返回一個MessageVO。第一個服務(serviceThatDoesWork)返回一個MessageVO,但是第二個服務(serviceThatDoesNotWork)拒絕,它根本沒有提供任何輸出。 但是,使用serviceThatDoesNotWork返回響應(java.ws.rs.core.Response)確實會提供輸出。即使當我跳過'doStuff'方法併爲每個服務創建一個虛擬MessageVO時,第二個也不會返回任何內容。爲什麼此REST服務不會在另一個服務器返回時返回?

問題 爲什麼第二個服務無法返回MessageVO?當我嘗試返回MessageVO時,它不會返回任何內容,並且在日誌記錄中不會顯示任何不尋常的內容。 這兩個服務需要返回完全相同的東西,但仍然其中一個不想返回任何東西,我在這裏沒有看到什麼? 難道是由於路徑(和/或參數數量)?

CODE MyServices.java:

@Path("/myService") 
... 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/myPath/{param1}/{param2}/{param3}") 
    public MessageVO serviceThatDoesWork(@PathParam("param1") Integer param1_id, @PathParam("param2") Integer param2_id, @PathParam("param2") Integer param2_id) 
    { 
     List<SomethingVO> lstO = MyRestServiceBusiness.doStuff(param1_id, param2_id, param3_id); 

     //return SUCCESS or FAIL message 
     MessageVO msg = new MessageVO(); 
     if(lstO.size() > 0) 
     { 
      List<String> s = new ArrayList<String>(); 
      for(SomethingVO k : lstO) 
      { 
       s.add(k.getId().toString()); 
      } 
      msg.setItem_ids(s); 
      msg.setMsg("SUCCESS"); 
     } 
     else 
     { 
      msg.setMsg("FAIL"); 
     } 
     return msg; 
    } 
... 
@GET 
@Path("/myPath/{param1}/{param2}/{param3}/{param4}/.../{param15}{a:(/a/[^/]+?)?}{b:(/b/[^/]+?)?}") 
public Response serviceThatDoesNotWork(@PathParam("param1")Integer param1_id, ..., @PathParam("param15") Integer param15_id, 
      @PathParam("a") String a_id, @PathParam("b") String b_id) 
    {  
     //PUT 'OPTIONAL' PARAMS IN A LIST 
     List<Integer> lstI = new ArrayList<Integer>(); 
     String aId = a_id != null ? a_id.split("/")[2] : null; 
     String bId = b_id != null ? b_id.split("/")[2] : null; 
     if(aId != null) 
     { 
      lstI.add(Integer.parseInt(aId)); 
     } 
     if(bId != null) 
     { 
      lstI.add(Integer.parseInt(bId)); 
     } 

     //DO STUFF 
     String afsId = ""; 
     if(lstI.size() > 0) 
     { 
      afsId = MyRestServiceBusiness.doStuff(param1, ..., lstI); 
     } 

     //return SUCCESS or FAIL message 
     MessageVO msg = new MessageVO(); 
     if(afsId != null && !afsId.isEmpty()) 
     { 
      List<String> s = new ArrayList<String>(); 
      s.add(afsId); 
      msg.setItem_ids(s); 
      msg.setMsg("SUCCESS"); 
     } 
     else 
     { 
      List<String> s = new ArrayList<String>(); 
      for(Integer i : lstI) 
      { 
       s.add(i.toString()); 
      }    
      msg.setItem_ids(s); 
      msg.setMsg("FAIL"); 
     }   

     //WENT THROUGH ALL ABOVE CODE AS EXPECTED, MESSAGEVO HAS BEEN FILLED PROPERLY 
     return msg; 
    } 

CODE MessageVO.java:

@XmlRootElement 
public class MessageVO 
{ 
    private String msg; 
    private List<String> item_ids; 


    //GETTERS 
    @XmlElement(name = "Message") 
    public String getMsg() { 
     return msg; 
    } 
    @XmlElement(name = "Item ID's") 
    public List<String> getItem_ids() { 
     return item_ids; 
    } 


    //SETTERS 
    public void setMsg(String msg) { 
     this.msg = msg; 
    } 
    public void setItem_ids(List<String> item_ids) { 
     this.item_ids = item_ids; 
    } 

如果我需要提供額外的信息,請問,這是我第一次嘗試(REST-)服務。

+0

你應該使用@Produces註釋與serviceThatDoesNotWork方法 – Vaseph

+0

@Vaseph噢我的,我不能相信我錯過了那部分!謝謝! – ElectricLime

回答

1

由於Vaseph在評論中提到我只是在第二個服務中忘記了@Produces註釋。