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);
    }
}
复制代码

 

posted @   Mars.wang  阅读(1358)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2021-07-05 springboot设置定时任务(2)
点击右上角即可分享
微信分享提示