2013-02-12 76 views
2

我正在使用JAX-RS生成RESTful服務。但是,在請求JSON時,布爾值將返回爲帶引號的字符串{"boolValue":"true"}而不是布爾值{"boolValue":true}返回布爾值爲字符串的JAX-RS REST服務

一個簡單的對象

@XmlRootElement 
    public class JaxBoolTest { 
    private boolean working; 

    public boolean isWorking() { 
     return working; 
    } 

    public void setWorking(boolean working) { 
     this.working = working; 
    } 

} 

一個簡單的JAX-RS REST服務

@Path("/jaxBoolTest") 
public class JaxBoolTestResouce { 
    @GET 
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    public JaxBoolTest getJaxBoolTest() { 
     JaxBoolTest jbt = new JaxBoolTest(); 
     jbt.setWorking(false); 
     return jbt; 
    } 
} 

而結果:

{"working":"false"} 

如何獲得布爾值布爾值,而比字符串?

+1

什麼JAX-RS實現您使用? – 2013-02-12 21:58:33

+0

您正在使用哪個JSON序列化程序? (我想避免它...) – 2013-02-12 22:24:24

+0

你有一個奇怪的結果 - 你設置工作屬性爲true,但其顯示爲(字符串)爲false。假設這不是您的打字錯誤,您的JSON庫可能無法識別該屬性,因爲更好的命名爲isWorking(而不是getWorking)。只是一個想法。 – Perception 2013-02-12 23:21:29

回答

3

使用jaxson(http://jackson.codehaus.org/)連載這個工作開箱:

public class BooleanTest { 
    @Test 
    public void test() throws Exception{ 
     System.out.println(new ObjectMapper().writeValueAsString(new JaxBoolTest())); 
    } 
} 

生成此輸出:

{"working":false} 

我強烈建議使用傑克遜序列化JSON。它效果很好。我過去使用過Jettison,但有很多問題。您可能必須配置您的jax-rs提供程序才能使用jackson,因爲它看起來不像已經在使用它。

另一個提示:使用jackson時不需要@XmlRootElement,除非你還想使用相同的bean提供jax-b xml。

+0

謝謝@凱爾。我不知道什麼是在做JSON序列化之前,但註冊傑克遜(http://wiki.fasterxml.com/JacksonFAQJaxRs第2.2節)解決這個問題。打破其他的東西,但我正在努力。 – Schlameel 2013-02-13 04:34:23

3

在我的情況下,JSON輸出顯示爲字符串(包括原始數據類型)的所有屬性。將此添加到我的web.xml中解決了這個問題。

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 
0
@POST @Path("/users") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public Object controlUserExisting(Object requestEntity) { 
    boolean result=RootBsn.controlUserExisting(requestEntity); 

    JSONObject json=new JSONObject(); 
    json.put("result",result); 

    return json.toString(); 
} 

檢索用戶現有 Sended並返回{ 「結果」:真}(如果存在的話)