package cn.huge.gateway.utils;
|
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
import com.fasterxml.jackson.databind.JavaType;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.SerializationFeature;
|
import com.fasterxml.jackson.databind.util.JSONPObject;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import java.io.IOException;
|
|
/**
|
* @title: JSON工具类
|
* @description: JSON工具类
|
* @company: hugeinfo
|
* @author: liyj
|
* @time: 2021-11-05 16:51:48
|
* @version: 1.0.0
|
*/
|
public class JsonMapper {
|
private static Logger logger = LoggerFactory.getLogger(JsonMapper.class);
|
private ObjectMapper mapper;
|
|
/**
|
* 构造函数
|
*/
|
public JsonMapper() {
|
this(null);
|
}
|
|
/**
|
* 构造函数
|
* @param include
|
*/
|
public JsonMapper(JsonInclude.Include include) {
|
this.mapper = new ObjectMapper();
|
|
if (include != null) {
|
this.mapper.setSerializationInclusion(include);
|
}
|
|
this.mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
|
}
|
|
/**
|
* 创建非空JsonMapper
|
* @return JsonMapper
|
*/
|
public static JsonMapper nonEmptyMapper() {
|
return new JsonMapper(JsonInclude.Include.NON_EMPTY);
|
}
|
|
/**
|
* 创建非默认JsonMapper
|
* @return JsonMapper
|
*/
|
public static JsonMapper nonDefaultMapper() {
|
return new JsonMapper(JsonInclude.Include.NON_DEFAULT);
|
}
|
|
/**
|
* 对象转json字符串
|
* @param object 对象
|
* @return String
|
*/
|
public String toJson(Object object) {
|
try
|
{
|
return this.mapper.writeValueAsString(object);
|
} catch (IOException e) {
|
logger.warn("write to json string error:" + object, e);
|
}return null;
|
}
|
|
/**
|
* json字符串转对象
|
* @param jsonString json字符串
|
* @param clazz 类
|
* @param <T> 对象
|
* @return T
|
*/
|
public <T> T fromJson(String jsonString, Class<T> clazz) {
|
if (StringUtils.isEmpty(jsonString)) {
|
return null;
|
}
|
try
|
{
|
return this.mapper.readValue(jsonString, clazz);
|
} catch (IOException e) {
|
logger.warn("parse json string error:" + jsonString, e);
|
}return null;
|
}
|
|
/**
|
* json字符串转对象
|
* @param jsonString json字符串
|
* @param type 类型
|
* @param <T> 对象
|
* @return T
|
*/
|
public <T> T fromJson(String jsonString, TypeReference<T> type) {
|
if (StringUtils.isEmpty(jsonString)) {
|
return null;
|
}
|
try
|
{
|
return this.mapper.readValue(jsonString, type);
|
} catch (IOException e) {
|
logger.warn("parse json string error:" + jsonString, e);
|
}return null;
|
}
|
|
/**
|
* json字符串转对象
|
* @param jsonString json字符串
|
* @param javaType java类型
|
* @param <T> 对象
|
* @return T
|
*/
|
public <T> T fromJson(String jsonString, JavaType javaType) {
|
if (StringUtils.isEmpty(jsonString)) {
|
return null;
|
}
|
try
|
{
|
return this.mapper.readValue(jsonString, javaType);
|
} catch (IOException e) {
|
logger.warn("parse json string error:" + jsonString, e);
|
}return null;
|
}
|
|
/**
|
* 创建数组类型
|
* @param collectionClass 数组类型
|
* @param elementClasses 对象类
|
* @return JavaType
|
*/
|
public JavaType createCollectionType(Class<?> collectionClass, Class<?>[] elementClasses) {
|
return this.mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
|
}
|
|
/**
|
* 更新
|
* @param jsonString json字符串
|
* @param object 对象
|
* @return T
|
*/
|
public <T> T update(String jsonString, T object) {
|
try
|
{
|
return this.mapper.readerForUpdating(object).readValue(jsonString);
|
} catch (JsonProcessingException e) {
|
logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);
|
} catch (IOException e) {
|
logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);
|
}
|
return null;
|
}
|
|
/**
|
* 转JsonP
|
* @param functionName 函数名
|
* @param object 对象
|
* @return String
|
*/
|
public String toJsonP(String functionName, Object object) {
|
return toJson(new JSONPObject(functionName, object));
|
}
|
|
/**
|
* 转字符串
|
*/
|
public void enableEnumUseToString() {
|
this.mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
|
this.mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
|
}
|
|
/**
|
* 获取ObjectMapper
|
* @return ObjectMapper
|
*/
|
public ObjectMapper getMapper() {
|
return this.mapper;
|
}
|
}
|
/**
|
* -------------------_ooOoo_-------------------
|
* ------------------o8888888o------------------
|
* ------------------88" . "88------------------
|
* ------------------(| -_- |)------------------
|
* ------------------O\ = /O------------------
|
* ---------------____/`---'\____---------------
|
* -------------.' \\| |// `.-------------
|
* ------------/ \\||| : |||// \------------
|
* -----------/ _||||| -:- |||||- \-----------
|
* -----------| | \\\ - /// | |-----------
|
* -----------| \_| ''\---/'' | |-----------
|
* -----------\ .-\__ `-` ___/-. /-----------
|
* ---------___`. .' /--.--\ `. . __----------
|
* ------."" '< `.___\_<|>_/___.' >'"".-------
|
* -----| | : `- \`.;`\ _ /`;.`/ - ` : | |-----
|
* -----\ \ `-. \_ __\ /__ _/ .-` / /-----
|
* ======`-.____`-.___\_____/___.-`____.-'======
|
* -------------------`=---='
|
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
* ---------佛祖保佑---hugeinfo---永无BUG----------
|
*/
|