1.序列化
ObjectMapper objectMapper = new ObjectMapper();
String str = objectMapper.writeValueAsString(object);
2.反序列化
ObjectMapper objectMapper = new ObjectMapper();
String str = "";
T t = objectMapper.readValue(str,T.class);
3.对日期的支持
默认不支持对LocalDateTime类型的序列化和反序列化,需要做特殊配置
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import org.springframework.util.StringUtils;
public class ObjectMapperFactory {
public ObjectMapperFactory() {
}
public static ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule timeModule = new JavaTimeModule();
timeModule.addSerializer(LocalDateTime.class, new ObjectMapperFactory.LocalDateTimeSerializer());
timeModule.addDeserializer(LocalDateTime.class, new ObjectMapperFactory.LocalDateTimeDeserializer());
objectMapper.registerModule(timeModule);
return objectMapper;
}
static class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
LocalDateTimeDeserializer() {
}
public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
String timestamp = jsonParser.getValueAsString();
return LocalDateTime.parse(timestamp, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
}
static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
LocalDateTimeSerializer() {
}
public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (!StringUtils.isEmpty(localDateTime)) {
jsonGenerator.writeString(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
}
}
}
4.对复杂类型反序列化的支持
Result<List<T>> result=ObjectMapperFactory
.getObjectMapper()
.readValue(string, new TypeReference<Result<List<T>>>() {
});
5.自定义字段映射
在对应字段使用JsonProperty注解
@JsonProperty("create_date")
private LocalDateTime createDate;
6.忽略不识别的字段
在实体类上加上以下字段
@JsonIgnoreProperties(ignoreUnknown = true)
7.驼峰转下划线
方法一:通过ObjectMapper设置(不推荐)
mapper.setPropertyNamingStrategy(com.fasterxml.jackson.databind.PropertyNamingStrategy.SNAKE_CASE);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
方法二:通过在application.properties增加如下配置
spring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
这种方法可能会对swagger的使用产生影响
方法三:采用在实体增加注解实现
//实现驼峰转下划线
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class BaseResultVO {
}
实体继承该类即可。如此不用每个类的字段都注明@jsonproperty注解
方法四:使用JsonProperty注解挨个添加
@JsonProperty("create_date")
private LocalDateTime createDate;
注意:本文归作者所有,未经作者允许,不得转载