如何将FasterXML \ Jackson中的布尔值序列化/反序列化为Int?

雷索姆:

我正在为返回布尔值“ 0”和“ 1” 的服务器编写JSON客户端当我尝试运行JSON客户端时,我目前收到以下异常:

HttpMessageNotReadableException: Could not read JSON: Can not construct instance of java.lang.Boolean from String value '0': only "true" or "false" recognized

因此,如何设置FasterXML \ Jackson来正确解析如下内容:

{
   "SomeServerType" : {
     "ID" : "12345",
     "ThisIsABoolean" : "0",
     "ThisIsABooleanToo" : "1"
   }
}

Pojo示例:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"someServerType"})
public class myPojo
{
   @JsonProperty("someServerType")
   SomeServerType someServerType;

   @JsonProperty("someServerType")
   public SomeServerType getSomeServerType() { return someServerType; }

   @JsonProperty("someServertype")
   public void setSomeServerType(SomeServerType type)
   { someServerType = type; }
}

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"someServerType"})
public class SomeServerType 
{
   @JsonProperty("ID")
   Integer ID;

   @JsonProperty("ThisIsABoolean")
   Boolean bool;

   @JsonProperty("ThisIsABooleanToo")
   Boolean boolToo;

   @JsonProperty("ID")
   public Integer getID() { return ID; }

   @JsonProperty("ID")
   public void setID(Integer id)
   { ID = id; }

   @JsonProperty("ThisIsABoolean")
   public Boolean getThisIsABoolean() { return bool; }

   @JsonProperty("ThisIsABoolean")
   public void setThisIsABoolean(Boolean b) { bool = b; }

   @JsonProperty("ThisIsABooleanToo")
   public Boolean getThisIsABooleanToo() { return boolToo; }

   @JsonProperty("ThisIsABooleanToo")
   public void setThisIsABooleanToo(Boolean b) { boolToo = b; }
}

Rest Client Line
注1:这是使用Spring 3.2
注2: toJSONString()-是使用Jackson序列化我的Parameters对象的辅助方法
注3:读取IN结果对象时发生异常

DocInfoResponse result = restTemplate.getForObject(docInfoURI.toString()
                                  + "/?input={input}",
                                  DocInfoResponse.class,
                                  toJSONString(params));
催眠药:

正如Paulo Pedroso的答案所提及和引用的那样,您将需要遵循自己的习惯JsonSerializerJsonDeserializer创建完成后,您需要在属性中添加@JsonSerialize@JsonDeserialize注释;指定用于每个类的类。

我在下面提供了一个小示例(希望很简单)。序列化程序和反序列化程序的实现都不是超级健壮的,但这应该可以帮助您入门。

public static class SimplePojo {

    @JsonProperty
    @JsonSerialize(using=NumericBooleanSerializer.class)
    @JsonDeserialize(using=NumericBooleanDeserializer.class)
    Boolean bool;
}

public static class NumericBooleanSerializer extends JsonSerializer<Boolean> {

    @Override
    public void serialize(Boolean bool, JsonGenerator generator, SerializerProvider provider) throws IOException, JsonProcessingException {
        generator.writeString(bool ? "1" : "0");
    }   
}

public static class NumericBooleanDeserializer extends JsonDeserializer<Boolean> {

    @Override
    public Boolean deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
        return !"0".equals(parser.getText());
    }       
}

@Test
public void readAndWrite() throws JsonParseException, JsonMappingException, IOException {
    ObjectMapper mapper = new ObjectMapper();

    // read it
    SimplePojo sp = mapper.readValue("{\"bool\":\"0\"}", SimplePojo.class);
    assertThat(sp.bool, is(false));

    // write it
    StringWriter writer = new StringWriter();
    mapper.writeValue(writer, sp);
    assertThat(writer.toString(), is("{\"bool\":\"0\"}"));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 Jackson 将 Y/N 映射到真/假布尔值将 XML 反序列化为对象

Jackson:将枚举值序列化和反序列化为整数

如何使用Jackson将反序列化的JSON反序列化为忽略键的对象?

GSON将布尔值序列化为0或1

使用Jackson将反序列化JSON数组反序列化为Map

使用Jackson将反序列化JSON数组反序列化为单个Java对象

如何使用Jackson将Java Enums序列化和反序列化为JSON对象

如何将C#中的Type类对象序列化和反序列化为YAML?

如何将 xml 序列化/反序列化为 C# 对象?

如何将JVM对象序列化和反序列化为String?

如何将 JSON 文件序列化和反序列化为 DataTable 以填充 DataGridView?

如何将JSON字典序列化/反序列化为数组

如何将嵌套的哈希表序列化/反序列化为JSON?

如何将多个对象序列化/反序列化为单个XML文件?

如何将结构反序列化/序列化为没有键的数组

如何反序列化json数组,然后将普通属性反序列化为jackson中的pojo。单独的数组有效

Jackson JsonDeserializer委托将字段反序列化为该字段类型的默认反序列化器

使用PHP中的类型将嵌套对象序列化/反序列化为JSON

如何通过 Jackson 的元素属性将相同的 xml 元素反序列化为不同的类?(多态反序列化)

如何将环境变量中的配置值反序列化为Vec?

使用Jackson将Java中的JSON反序列化

如何在Java中使用Jackson将缺少的属性反序列化为默认值

将布尔值序列化为“ 1”和“ 0”,而不是“ true”和“ false”

Jackson将数组元素反序列化为特定字段

使用Jackson XmlMapper将XML反序列化为POJO

使用Jackson将JSON反序列化为ArrayList <POJO>

Java Spring:将Jackson反序列化为ZonedDateTime

Jackson-将地图实现反序列化为HashMap

如何在Spring Boot Rest响应中将布尔值序列化为字符串?