实体类字段注解序列化

当数据库字段类型为非正常类型,如JSONB、Timestamp、Geomtry 等,此时可以通过 注解将其在查询或保存时的形式进行转换;

JSONB字段类型
  1. JsonArrayToStringDeserialize.java (jsonArray 转字符串)
package ktw.micro.service.things.serialize;

import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.databind.util.StdConverter;

/**
 * @Description: jsonArr转string反序列化
 * @Author: hyl
 * @Date: 2022/7/14
 **/
public class JsonArrayToStringDeserialize extends StdConverter<JSONArray, String> {

    @Override
    public String convert(JSONArray jsonElements) {
        return JSONArray.toJSONString(jsonElements);
    }
}

  1. StringToJsonArraySerializer.java (字符串转 jsonArray)
package ktw.micro.service.things.serialize;

import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.databind.util.StdConverter;

/**
 * @Description: 字符串转JsonArray序列化
 * @Author: hyl
 * @Date: 2022/7/14
 **/
public class StringToJsonArraySerializer extends StdConverter<String, JSONArray> {

    @Override
    public JSONArray convert(String s) {
        JSONArray jsonArray = new JSONArray();
        try {
            jsonArray = JSONArray.parseArray(s);
        }catch (Exception e){
            e.printStackTrace();
        }
        return jsonArray;
    }
}
  1. entity.java (实体类)
    @ApiModelProperty("推送信息")
    @JsonSerialize(converter = StringToJsonArraySerializer.class)
    @JsonDeserialize(converter = JsonArrayToStringDeserialize.class)
    private String compareinfo;
Timestamp字段类型
  1. entity.java (实体类)
    @ApiModelProperty(value = "创建时间", example = "xxxx")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Timestamp createtime;
Geomtry字段类型
  1. GeometryToWKTSerializer.java (空间位置转WKT格式字符串)
public class GeometryToWKTSerializer extends JsonSerializer<Geometry> {
    public GeometryToWKTSerializer() {
    }

    public void serialize(Geometry geometry, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        String jsonValue = null;

        try {
            if (geometry != null) {
                jsonValue = geometry.toText();
            }
        } catch (Exception var6) {
            var6.printStackTrace();
        }

        jsonGenerator.writeString(jsonValue);
    }
}

  1. WKTToGeometryDeserializer.java (WKT格式字符串转空间位置)
public class WKTToGeometryDeserializer extends JsonDeserializer<Geometry> {
    private static final Integer SRID = 4490;

    public WKTToGeometryDeserializer() {
    }

    public Geometry deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) {
        try {
            String text = jsonParser.getText();
            if (text != null && text.length() > 0) {
                Geometry geometry = (new WKTReader()).read(text);
                geometry.setSRID(SRID);
                return geometry;
            } else {
                return null;
            }
        } catch (Exception var5) {
            return null;
        }
    }
}
  1. entity.java 实体类
	@Column(name = "\"the_geom\"", columnDefinition = "Geometry(MultiPolygon,4490)")
	@ApiModelProperty(value = "空间数据", example = "xxx")
	@JsonSerialize(using = GeometryToWKTSerializer.class)
	@JsonDeserialize(using = WKTToGeometryDeserializer.class)
	private Geometry the_geom;
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值