使用jackson实现json的序列化以及反序列化
1.添加maven依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<scope>provided</scope>
</dependency>
2.BootObjectMapper
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.StdScalarSerializer;
import java.io.IOException;
/**
* A custom ObjectMapper for general using
*/
public class BootObjectMapper extends ObjectMapper {
public BootObjectMapper() {
this.setSerializationInclusion(JsonInclude.Include.NON_NULL);// 设置序列化时,null字段不序列化
this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);// 设置序列化时,遇到空对象时不抛异常
this.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);// 设置反序列化时,遇到未知属性不抛异常
this.registerModule(new StringTrimModule());
}
/**
* 序列化/反序列化时,对 String 类型参数,执行 trim() 操作
*/
public static class StringTrimModule extends SimpleModule {
public StringTrimModule() {
addSerializer(String.class, new StdScalarSerializer<String>(String.class) {
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(value.trim());
}
});
addDeserializer(String.class, new StdScalarDeserializer<String>(String.class) {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException, JsonProcessingException {
return jsonParser.getValueAsString().trim();
}
});
}
}
}
3.jackson工具类
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
/**
* Jackson 常用方法静态化
*/
public final class Jackson {
private static final ObjectMapper mapper = new BootObjectMapper();
/**
* object to json
* @param object to be wrote as json
* @return
*/
public static String asJson(final Object object) {
try {
return mapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
throw new JacksonException("Jackson asJson cause Exception", e);
}
}
/**
* json to object
* @param json to be read as object
* @param clz target object Class
* @param <T>
* @return
*/
public static <T> T asObject(final String json, Class<T> clz) {
try {
return mapper.readValue(json, clz);
} catch (IOException e) {
throw new JacksonException("Jackson asObject cause Exception", e);
}
}
/**
* json to object
* @param json to be read as object
* @param valueTypeRef target object TypeReference
* @param <T>
* @return
*/
public static <T> T asObject(final String json, TypeReference<T> valueTypeRef) {
try {
return mapper.readValue(json, valueTypeRef);
} catch (IOException e) {
throw new JacksonException("Jackson asObject cause Exception", e);
}
}
/**
* JacksonException
*/
public static final class JacksonException extends RuntimeException {
public JacksonException(String message, Throwable cause) {
super(message, cause);
}
}
}