2015-12-10 124 views
1

我有一個REST調用返回會話用戶415不支持的媒體類型 - 不工作的GET

@GET 
    @Produces(" text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") 
    @Path(value = "getSessionUserName") 
    public Response getSessionUserName() { 

     try { 

      Session session = SessionManager.getCurrentSession(); 
      String details = session.getUserDisplayName().toString(); 
      return Response.ok(details).build(); 
     } 
     catch(Exception e) { 
      return handleExceptions(e); 
     } 

每次我嘗試訪問此,我得到一個415不支持的媒體類型的異常的名稱。 我有其他幾乎相同的電話,工作正常。我無法弄清楚這個問題。

回答

0

@Produces允許一個單一的字符串的媒體類型(不是一個單一的字符串,用逗號分隔的媒體類型),或單串的媒體類型

@Produces("application/xml") 

-or- 

@Produces({"text/html","application/xhtml+xml","application/xml;q=0.9", "*/*;q=0.8"}) 

另一件事情的一個逗號分隔的列表,你可能想去通過維基百科關於Content Negotiation的文章。我想你可能不完全理解它是如何工作的。你的產品中有什麼是瀏覽器發送的內容。這是說,它想要數據在HTML,XHTML,或者如果這些都不可用,然後XML,如果不可用,然後給我任何東西。

但在服務器端,您需要確定實際能夠生成的類型。你真的可以製作HTML嗎,你真的可以製作XHTML嗎,你真的可以製作XML嗎? @Produces註釋與內容協商一起工作。有「廣告」你可以製作什麼類型的媒體。客戶端應該發送一個Accept標題和它能夠處理的媒體類型。這就是談判發生的地方。如果客戶想要一個類型,服務器不能生成,它將得到一個406不可接受的錯誤。 ConNeg就是這樣工作的。

相關問題