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); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
2021-07-05 springboot设置定时任务(2)