目录
1.创建jacksontutil工具类并私有化其构造方法
对于封装的工具类,我们不需要创建其实例对象,我们一般都直接使用其静态方法即可,所以我们将其构造函数进行私有化。
java
public class JacksonUtil {
private JacksonUtil() {
}
2.将ObjectMapper单例化
java
/**
* 单例
*/
private final static ObjectMapper OBJECT_MAPPER;
static {
OBJECT_MAPPER = new ObjectMapper();
}
private static ObjectMapper getObjectMapper() {
return OBJECT_MAPPER;
}
3.简化对异常捕获
由于在使用ObjectMapper中的方法的时候,会抛出异常,如果我们手动的try-catch会十分的麻烦,所以我们借鉴java内部对异常的简化。
java
private static <T> T tryParse(Callable<T> parser) {
return tryParse(parser, JacksonException.class);
}
private static <T> T tryParse(Callable<T> parser, Class<? extends Exception> check) {
try {
return parser.call();
} catch (Exception var4) {
if (check.isAssignableFrom(var4.getClass())) {
throw new JsonParseException(var4);
}
throw new IllegalStateException(var4);
}
}
4.对常用方法进行封装
java
/**
* 序列化方法
*
* @param object
* @return
*/
public static String writeValueAsString(Object object) {
return JacksonUtil.tryParse(() -> {
return JacksonUtil.getObjectMapper().writeValueAsString(object);
});
}
/**
* 反序列化
*
* @param content
* @param valueType
* @return
* @param <T>
*/
public static <T> T readValue(String content, Class<T> valueType) {
return JacksonUtil.tryParse(() -> {
return JacksonUtil.getObjectMapper().readValue(content, valueType);
});
}
/**
* 反序列化 List
*
* @param content
* @param paramClasses
* @return
* @param <T>
*/
public static <T> T readListValue(String content, Class<?> paramClasses) {
JavaType javaType = JacksonUtil.getObjectMapper().getTypeFactory()
.constructParametricType(List.class, paramClasses);
return JacksonUtil.tryParse(() -> {
return JacksonUtil.getObjectMapper().readValue(content, javaType);
});
}
}
小疑问
public static String writeValueAsString(Object object) {
return JacksonUtil.tryParse(() -> {
return JacksonUtil.getObjectMapper().writeValueAsString(object);
});
writeValueAsString再次调用不是循环了吗
弄 !!!
