1 设置特性
特性配置官方文档: https://github.com/FasterXML/jackson-databind/wiki/Serialization-Features
- 忽略新的字段属性
- objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- 允许基本类型的值为 null
- objectMapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
- 允许枚举类型被序列化为数字
- objectMapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, false);
- 允许单值读为数组
- objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
- 忽略对象字段的可见性
- objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
2 使用注解
2.1 忽略空值字段
- 全局忽略空值
- objectMapper.setSerializationInclusion(Include.NON_NULL);
- 字段忽略空值
- @JsonInclude(Include.NON_NULL): 在字段上配置
2.2 忽略某些字段
- 在类上注解,忽略某些字段
- @JsonIgnoreProperties(value = { “name” })
- 在类上注解,忽略未知字段
- @JsonIgnoreProperties(ignoreUnknown = true)
- 忽略某个字段
- @JsonIgnore:序列化的时候忽略某字段
- 忽略某种类型
- @JsonIgnoreType:在某个子类上注解,这个子类的对象序列化时都忽略
- 通过写过滤器来忽略字段
- @JsonFilter(“myFilter”)
2.3 字段改名
- @JsonProperty(“name”):序列化和反序列化时指定名字,也可用在非标准的 getters、setters 上
- @JsonAlias:反序列化的别名
2.4 日期格式
- 指定日期格式
- DateFormat df = new SimpleDateFormat(“yyyy-MM-dd HH:mm a z”);
- objectMapper.setDateFormat(df);
- 加在字段上,指定日期格式
- @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = “dd-MM-yyyy hh:mm:ss”)
2.5 其他注解
- @JsonRawValue:加上这个注解的字段,在反序列化的时候会原样保留,不会进一步解析
3 ObjectMapper 操作
- 写对象为 JSON
- String carAsString = objectMapper.writeValueAsString(new Car(“yellow”, “renault”));
- 读为对象
- Car car = objectMapper.readValue(json, Car.class);
- 读为 JsonNode
- JsonNode jsonNode = objectMapper.readTree(json);
- 读为 List
- List
listCar = objectMapper.readValue(jsonCarArray, new TypeReference<List >(){});
- List
- 读为 Array
- objectMapper.configure(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY, true);
- Car[] cars = objectMapper.readValue(jsonCarArray, Car[].class);
- 读为 Map
- Map<String, Object> map = objectMapper.readValue(json, new TypeReference<Map<String,Object>>(){});