2016-12-02 45 views
1

我有這個問題:Jax.rs:什麼是對象的零長度表示?

我們有一個JAX.RS API這樣的:

@GET 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
@Path("get") 
public User get(@QueryParam(value = "id") String identifier) { 
    return toUser(getUserEntry(identifier)); 
} 

的TOUSER()方法可以返回空值,這在實踐中意味着客戶將看到一個204 - 無內容響應。

現在,在客戶端上我的代碼看起來是這樣的:

getWebTarget("user") 
      .path("get") 
      .queryParam("id", identifier) 
      .request(getMediaType()) 
      .get() 
      .readEntity(SsoUser.class); 

我期待readEntity()拋出某種異常,但它實際上返回null,不抱怨。

綜觀documentation,我看到:

爲一個零長度的響應實體返回表示零長度的數據對應的Java對象。 如果未爲Java類型定義零長度表示形式,則引發包含基礎NoContentException的ProcessingException。

因此,看起來我的User類確實定義了「零長度表示」。但是我無法在文檔中的任何位置找到這種表示的含義。

我可以理解Java 可能推斷零長度表示爲空,但我不知道在哪裏定義。

對此有何見解?

回答

-1

我可能對此有錯,但我不認爲Jax-RS能夠爲您處理null值。你可以做什麼是明確處理這種情況,例如

@GET 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
@Path("get") 
public Response get(@QueryParam(value = "id") String identifier) { 
    User maybeNull = toUser(getUserEntry(identifier)); 
    Response response = null; 
    if(null == maybeNull) { 
     response = Response.noContent().build(); 
    } else {  
     response = Response.ok(maybeNull).build(); 
    } 
    return response; 
} 
相關問題