Jackson 注解 -- 类型转换(序列化,反序列化)、私有字段
生活随笔
收集整理的這篇文章主要介紹了
Jackson 注解 -- 类型转换(序列化,反序列化)、私有字段
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果輸入輸出 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();// 將對象轉成 jsonString 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> {@Overridepublic 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> {@Overridepublic void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if(value) {gen.writeNumber(1);} else {gen.writeNumber(0);}}}默認情況下,沒有 setter 和 getter 方法的字段不會被輸出,我們也可以使用注解 @JsonAutoDetect 設置可見性。
package shangbo.jackson.demo18;import org.apache.commons.lang3.builder.ToStringBuilder;import com.fasterxml.jackson.annotation.JsonAutoDetect;@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) public class Person {private Integer id = 0;private String firstname;private String lastname;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;} } package shangbo.jackson.demo18;import com.fasterxml.jackson.databind.ObjectMapper;public class App {public static void main(String[] args) throws Exception {// 實例化 ObjectMapper 對象ObjectMapper objectMapper = new ObjectMapper();// 將對象轉成 jsonString json = objectMapper.writeValueAsString(newPerson());System.out.println(json);}private static Person newPerson() {Person shangbo = new Person();shangbo.setFirstname("Bo");shangbo.setLastname("Shang");return shangbo;} }原文鏈接:https://blog.csdn.net/shangboerds/article/details/90572693
總結
以上是生活随笔為你收集整理的Jackson 注解 -- 类型转换(序列化,反序列化)、私有字段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jackson 注解 -- 使用 Map
- 下一篇: Selector SelectionK