Jackson 注解 -- 类型转换

    xiaoxiao2024-11-15  58

    – Start

    点击此处观看本系列配套视频。


    如果输入输出 JSON 时需要类型转换,我们可以使用注解 @JsonDeserialize 和 @JsonSerialize

    package shangbo.jackson.demo17; import com.fasterxml.jackson.databind.ObjectMapper; public class App { public static void main(String[] args) throws Exception { // 实例化 ObjectMapper 对象 ObjectMapper objectMapper = new ObjectMapper(); // 将对象转成 json String json = objectMapper.writeValueAsString(newPerson()); System.out.println(json); // 将 json 转成对象 Person shangbo = objectMapper.readValue(json, Person.class); System.out.println(shangbo); } private static Person newPerson() { Person shangbo = new Person(); shangbo.setFirstname("Bo"); shangbo.setLastname("Shang"); shangbo.setIsMale(true); return shangbo; } } package shangbo.jackson.demo17; import org.apache.commons.lang3.builder.ToStringBuilder; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class Person { private String firstname; private String lastname; @JsonDeserialize(using = BooleanToIntDeserializer.class) @JsonSerialize(using = BooleanToIntSerializer.class) private Boolean isMale; public String toString() { return ToStringBuilder.reflectionToString(this); } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public Boolean getIsMale() { return isMale; } public void setIsMale(Boolean isMale) { this.isMale = isMale; } } package shangbo.jackson.demo17; import java.io.IOException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; public class BooleanToIntDeserializer extends JsonDeserializer<Boolean> { @Override public Boolean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { String val = p.getText(); if("0".equals(val)) { return false; } return true; } } package shangbo.jackson.demo17; import java.io.IOException; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; public class BooleanToIntSerializer extends JsonSerializer<Boolean> { @Override public void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException { if(value) { gen.writeNumber(1); } else { gen.writeNumber(0); } } }

    – 更多参见:Jackson 精萃 – 声 明:转载请注明出处 – Last Updated on 2019-05-26 – Written by ShangBo on 2019-05-26 – End

    最新回复(0)