package com.ltkj.tduck.handler;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.ltkj.tduck.utils.JsonUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.ibatis.type.JdbcType;
|
import org.apache.ibatis.type.MappedJdbcTypes;
|
import org.apache.ibatis.type.MappedTypes;
|
|
import java.io.IOException;
|
|
/**
|
* Jackson 实现 JSON 字段类型处理器
|
*
|
* @author hubin
|
* @since 2019-08-25
|
*/
|
@Slf4j
|
@MappedTypes({Object.class})
|
@MappedJdbcTypes(JdbcType.VARCHAR)
|
public class JacksonTypeHandler extends AbstractJsonTypeHandler<Object> {
|
private static ObjectMapper objectMapper = new ObjectMapper();
|
private Class<?> type;
|
|
public JacksonTypeHandler(Class<?> type) {
|
if (log.isTraceEnabled()) {
|
log.trace("JacksonTypeHandler(" + type + ")");
|
}
|
Assert.notNull(type, "Type argument cannot be null");
|
this.type = type;
|
}
|
|
public static void setObjectMapper(ObjectMapper objectMapper) {
|
Assert.notNull(objectMapper, "ObjectMapper should not be null");
|
JacksonTypeHandler.objectMapper = JsonUtils.getInstance();
|
}
|
|
@Override
|
protected Object parse(String json) {
|
try {
|
if (StrUtil.isBlank(json)) {
|
return null;
|
}
|
return objectMapper.readValue(json, type);
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
@Override
|
protected String toJson(Object obj) {
|
try {
|
return JsonUtils.objToJsonIgnoreNull(obj);
|
} catch (JsonProcessingException e) {
|
throw new RuntimeException(e);
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
}
|