使用场景:
fastjson爆出诸多漏洞之后,为了不动原有代码,用jackson做的兼容
使用姿势:
public class JacksonUtils {
private static ObjectMapper mapper;
static {
mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
}
public static String toJSONString(Object obj) {
return obj != null ? toJSONString(obj, () -> "") : "";
}
public static <T> T parseObject(String json, Class<T> clazz) {
try {
return mapper.readValue(json, clazz);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
public static <T> List<T> parseArray(String json, Class<T> clazz) {
try {
return json == null ? null : mapper.readValue(json, mapper.getTypeFactory().constructParametricType(List.class, clazz));
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
public static <T> T parseObject(String json, TypeReference<T> type) {
try {
return json == null ? null : mapper.readValue(json, type);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
private static String toJSONString(Object obj, Supplier<String> defaultSupplier) {
try {
return obj != null ? mapper.writeValueAsString(obj) : defaultSupplier.get();
} catch (JsonProcessingException e) {
return defaultSupplier.get();
}
}
}