原文网址:SpringBoot--封装JSON工具类(基于Jackson)_IT利刃出鞘的博客-CSDN博客
简介
说明
本文提供一个JSON工具类,本工具是对Jackson(也就是ObjectMapper)的封装。
优点
- 调用者无需捕获异常
- 本工具捕获了checked 异常,然后抛出RuntimeException,所以无需外部捕获
- 缺陷少
- 本工具基于Jackson,稳定、缺陷少(没有FastJson那么多bug)。
相关网址
Jackson--使用/教程/示例_IT利刃出鞘的博客-CSDN博客_jackson教程
代码
package com.knife.common.util;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
/**
* Json工具
*/
public class JsonUtil {
private static final ObjectMapper objectMapper = new ObjectMapper();
static {
// 反序列化:JSON字段中有Java对象中没有的字段时不报错
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 反序列化:不允许基本类型为null
//objectMapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, true);
// 序列化:序列化BigDecimal时不使用科学计数法输出
objectMapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true);
// 序列化:Java对象为空的字段不拼接JSON
//objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
public static <T> T toObject(String string, Class<T> cls) {
try {
return objectMapper.readValue(string, cls);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public static <T> T toObject(String str, TypeReference<T> valueTypeRef) {
try {
return objectMapper.readValue(str, valueTypeRef);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("rawtypes")
public static Map toMap(String str) {
try {
return objectMapper.readValue(str, Map.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public static String toJson(Object obj) {
try {
return objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public static <T> List<T> toObjectList(String string, TypeReference<List<T>> typeReference) {
try {
return objectMapper.readValue(string, typeReference);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static JsonNode toTree(String string) {
try {
return objectMapper.readTree(string);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}
用法
跟ObjectMapper一样。例如:User user = JsonUtil.toObject(str, User.class);