读取JSON Payload,因为它是一个布尔类型

时间:2016-05-15 01:06:37

标签: java json

JSON - JACKSON - Parser问题:

问题:当用户在JSON中为布尔变量传递0时,Payload解析器将其构造为FALSE,如果客户端传递任何大于零的值,我将在我的POJO中获得TRUE。我需要/ JACKSON Parser必须抛出任何值的错误,除了 - TRUE / true / FALSE / false我的POJO中的布尔变量。< / p>

JACKSON JAXB解析器会抛出任何布尔变量的错误,如果用户通过了 - &#34; abc&#34; /&#34; 1234&#34;但不是数字,即它接受0/1/123等...

如何设置解析器为数字抛出错误?

先谢谢。

1 个答案:

答案 0 :(得分:0)

这个问题的解决方案只是在定制杰克逊图书馆的序列化去磁化行为 在构造函数中,我们可以提供反序列化配置以及自定义反序列化器。

public class CustomObjectMapper extends ObjectMapper {

    public CustomObjectMapper() {
         }     
}

准备SimpleDeserializers的对象。

SimpleDeserializers simpleDeserializers = new SimpleDeserializers();

现在我们将为我们定制的一个布尔反序列化器准备一个布尔反序列化器。

private class BooleanDeserializer&lt;T extends Object&gt; extends
 JsonDeserializer&lt;Boolean&gt; {
 final protected Class&lt;?&gt; _valueClass = Boolean.class;

@Override
 public Boolean deserialize(JsonParser jp, DeserializationContext ctxt)
 throws IOException, JsonProcessingException {
 // TODO Auto-generated method stub
 return _parseBooleanPrimitive2(jp, ctxt);
 }

protected final boolean _parseBooleanPrimitive2(JsonParser jp,
 DeserializationContext ctxt) throws IOException,
 JsonProcessingException {
 JsonToken t = jp.getCurrentToken();
 if (t == JsonToken.VALUE_TRUE) {
 return true;
 }
 if (t == JsonToken.VALUE_FALSE) {
 return false;
 }
 if (t == JsonToken.VALUE_STRING) {
 String text = jp.getText().trim();
 if ("true".equals(text)) {
 return true;
 }
 if ("false".equals(text)) {
 return Boolean.FALSE;
 }

throw ctxt.weirdStringException(_valueClass,
 "only \"true\" or \"false\" recognized");
 }
 // Otherwise, no can do:
 throw ctxt.mappingException(_valueClass);
 }
 }

这个布尔反序列化器是一个子类化JsonDeserializer的通用类,它被提供来处理默认布尔反序列化器通常不支持的值的反序列化。