Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS REST服务以字符串形式返回布尔值_Java_Json_Jax Rs - Fatal编程技术网

Java JAX-RS REST服务以字符串形式返回布尔值

Java JAX-RS REST服务以字符串形式返回布尔值,java,json,jax-rs,Java,Json,Jax Rs,我正在使用JAX-RS生成RESTful服务。但是,当请求JSON时,布尔值以带引号的字符串{“boolValue”:“true”}而不是布尔值{“boolValue”:true}返回 简单物体 @XmlRootElement public class JaxBoolTest { private boolean working; public boolean isWorking() { return working; } public

我正在使用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-RSREST服务

@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()将其序列化,这是现成的:

public class BooleanTest {
    @Test
    public void test() throws Exception{
        System.out.println(new ObjectMapper().writeValueAsString(new JaxBoolTest()));
    }
}
产生了以下输出:

{"working":false}
我强烈建议使用Jackson序列化JSON。它工作得很好。我过去使用过抛弃,但有很多问题。您可能需要配置jax-rs提供程序来使用jackson,因为它看起来并没有在使用它


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

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

<init-param>
  <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
  <param-value>true</param-value>
</init-param>

com.sun.jersey.api.json.POJOMappingFeature
真的
检索现有用户
发送并返回{“result”:true}(如果存在)

您使用的是什么JAX-RS实现?您使用的是哪个JSON序列化程序?(我想避免…)这里有一个奇怪的结果-您将working属性设置为true,但它显示为(string)false。假设这不是您的输入错误,您的JSON库可能无法识别该属性,因为更好的名称是isWorking(与getWorking相反)。只是想一想。@Donal-我不知道我在使用哪个JSON序列化程序。我刚刚下载了Jersey 1.17,其中包括Jackson 1.9.2。@Werner-Jackson(Jackson-jaxrs-1.9.2.jar)我相信感谢@Kyle。我不知道之前是怎么做JSON序列化的,但是注册Jackson(第2.2节)修复了这个问题。弄坏了其他东西,但我正在努力。
@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();
}