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 @ 2022-07-05 11:31  Mars.wang  阅读(1205)  评论(1编辑  收藏  举报