簡體   English   中英

JAX-RS REST服務以字符串形式返回布爾值

[英]JAX-RS REST service returning boolean as string

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

一個簡單的對象

@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"}

如何獲取布爾值而不是字符串的布爾值?

使用jaxson( http://jackson.codehaus.org/ )進行序列化可以立即使用:

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

產生此輸出:

{"working":false}

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

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

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

<init-param>
  <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
  <param-value>true</param-value>
</init-param>
@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();
}

檢索用戶現有的已發送和返回{“ result”:true}(如果存在)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM