一、JPA内置转换器
- 注解@Converter
- 注入ObjectMapper
- 实现AttributeConverter接口
- 覆盖两个方法
@Converter public class ListAndJsonConverter implements AttributeConverter<List<Object>, String> { @Autowired private ObjectMapper objectMapper; @Override public String convertToDatabaseColumn(List<Object> objects){ try { return objectMapper.writeValueAsString(objects); } catch (JsonProcessingException e) { e.printStackTrace(); throw new RuntimeException("message"); } } @Override @SuppressWarnings("unchecked") public List<Object> convertToEntityAttribute(String s) { if (s == null) { return null; } try { return objectMapper.readValue(s, List.class); } catch (JsonProcessingException e) { e.printStackTrace(); throw new RuntimeException("message"); } } }
- 使用:
@Convert(converter = ListAndJsonConverter.class) private List<对应实体> test;
二、自定义转换器
- 加入容器@Component
- 静态定义ObjectMapper,注入ObjectMapper
- 自定义实现objectToJson、jsonToObject
@Component public class GenericAndJsonConverter { private static ObjectMapper objectMapper; @Autowired public void setObjectMapper(ObjectMapper objectMapper) { GenericAndJsonConverter.objectMapper = objectMapper; } public static <T> String objectToJson(T t) { try { return GenericAndJsonConverter.objectMapper.writeValueAsString(t); } catch (JsonProcessingException e) { e.printStackTrace(); throw new RuntimeException("message"); } } public static <T> T jsonToObject(String s, TypeReference<T> tTypeReference) { if (s == null) { return null; } try { return GenericAndJsonConverter.objectMapper.readValue(s, tTypeReference); } catch (JsonProcessingException e) { e.printStackTrace(); throw new RuntimeException("message"); } } }