3

我正在使用 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"}

如何将布尔值作为布尔值而不是字符串?

4

3 回答 3

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}

我强烈推荐使用 Jackson 来序列化 JSON。它工作得很好。我过去使用过 Jettison,但遇到了很多问题。您可能必须配置您的 jax-rs 提供程序以使用 jackson,因为它看起来不像已经在使用它。

另一个提示:使用jackson 时不需要@XmlRootElement,除非您还想使用相同的bean 提供jax-b xml。

于 2013-02-12T23:20:37.043 回答
3

在我的例子中,JSON 输出将所有属性显示为字符串(包括原始数据类型)。将此添加到我的 web.xml 解决了问题。

<init-param>
  <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
  <param-value>true</param-value>
</init-param>
于 2013-03-01T16:57:28.927 回答
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();
}

检索用户现有已发送并返回{“result”:true}(如果存在)

于 2015-07-15T07:32:35.993 回答