开发过程中,一般将对象转换成String 或String 转对象 大部分通过fastjson的方式,但是各种json框架在处理基本类型的时候,会显得力不从心。这里最优秀的还是jackson的转换方式。
主要使用ObjectMapper 对象,可以实现Object 到string 也可实现Object 到 byte[] 的转换。
package com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUtil {
private static final ObjectMapper MAPPER;
static {
MAPPER = (new ObjectMapper((new JsonFactory()).disable(JsonFactory.Feature.INTERN_FIELD_NAMES))).registerModule(new GuavaModule());
MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
MAPPER.enable(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS);
MAPPER.enable(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_COMMENTS);
MAPPER.registerModule(new ParameterNamesModule());
MAPPER.registerModule(new KotlinModule());
MAPPER.registerModule(new ProtobufModule());
}
public static String write(@Nullable Object obj) {
if (obj == null) {
return null;
} else {
try {
return MAPPER.writeValueAsString(obj);
} catch (Exception ex) {
log.error("Jackson write exception", ex);
return null;
}
}
}
public static <T> T read(String jsonStr, Class<T> clazz) {
if (StringUtils.isBlank(jsonStr)) {
return null;
}
try {
return MAPPER.readValue(jsonStr, clazz);
} catch (IOException e) {
log.error("Jackson read exception", e);
return null;
}
}
public static <T> T read(String jsonStr, TypeReference<T> tTypeReference) {
if (StringUtils.isBlank(jsonStr)) {
return null;
}
try {
return MAPPER.readValue(jsonStr, tTypeReference);
} catch (IOException e) {
log.error("Jackson read exception", e);
return null;
}
}
}