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 { 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); } } }