spring-data-jpa将实体类的List<T>转换成String入库
在项目中遇到这样一个需求,一个实体类中有一个属性是list对象,我希望前端传过来的时候是List,
这样这个属性可以有比较友好的格式定义,但实际序列化入库的时候,毕竟mysql不支持对象格式,我希望直接把这个属性存储成string类型
查询的时候再把String转换的List
在以往的实现中,我要定义两个类,一个给前端用,属性是List,一个是实体类我自己用,对应的属性是String。
今天学习了spring-data-jpa发现它有一个注解@Convert就是专门用来处理这个事情。
比如我的java实体类中有两个字段
@NotEmpty @Convert(converter = LocationListStringAttrConverter.class) List<Location> locations; @ApiModelProperty("全局参数") @Convert(converter = PropertyListStringAttrConverter.class) List<Property> globalParams;
我希望前端给我传的的时候,直接以List对象的方式传进来。
我入库的时候存储成String,然后查询出来还是List
这个时候只需要 在对应的属性上加上@Convert注解,指定序列化和反序列化的类名称即可。
某一个转换器类的实现如下
public class LocationListStringAttrConverter implements AttributeConverter<List<Location>, String>, Serializable { private static final long serialVersionUID = 8193129548393714526L; @Override public String convertToDatabaseColumn(List<Location> locations) { return JSONArray.toJSONString(locations); } @Override public List<Location> convertToEntityAttribute(String s) { if (s == null || s.equals("")) { return null; } return JSONArray.parseArray(s, Location.class); } }