我正在使用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"}
如何将布尔值作为布尔值而不是字符串?
答案 0 :(得分: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。
答案 1 :(得分:3)
在我的例子中,JSON输出将所有属性显示为字符串(包括原始数据类型)。将此添加到我的web.xml修复了问题。
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
答案 2 :(得分: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();
}
检索用户现有的 已发送并返回{&#34;结果&#34;:true}(如果存在)