package org.hibernate.redis.serializer; import com.fasterxml.jackson.databind.ObjectMapper; import kr.debop4j.core.Guard; import kr.debop4j.core.tools.ArrayTool; import lombok.Getter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Jackson 라이브러리를 이용한 Json Serializer 입니다. * * @author 배성혁 sunghyouk.bae@gmail.com * @since 13. 5. 3. 오후 11:45 */ public class JacksonRedisSerializer<T> implements RedisSerializer<T> { private static final Logger log = LoggerFactory.getLogger(JacksonRedisSerializer.class); @Getter private final ObjectMapper mapper; public JacksonRedisSerializer() { this(new ObjectMapper()); } public JacksonRedisSerializer(ObjectMapper mapper) { this.mapper = Guard.firstNotNull(mapper, new ObjectMapper()); } @Override public byte[] serialize(T graph) { try { if (graph == null) return EMPTY_BYTES; log.trace("인스턴스를 JSON 포맷으로 직렬화합니다. graph=[{}]", graph); return mapper.writeValueAsBytes(graph); } catch (Exception e) { log.error("객체를 Json 직렬화하는데 실패했습니다.", e); throw new RuntimeException(e); } } @Override @SuppressWarnings( "unchecked" ) public T deserialize(byte[] bytes) { try { if (ArrayTool.isEmpty(bytes)) return (T) null; if (log.isDebugEnabled()) log.debug("JSON 역직렬화를 수행합니다..."); return (T) mapper.readValue(bytes, Object.class); } catch (Exception e) { log.error("Json 역직렬화하는데 실패했습니다.", e); throw new RuntimeException(e); } } }