当数据库字段类型为非正常类型,如JSONB、Timestamp、Geomtry 等,此时可以通过 注解将其在查询或保存时的形式进行转换;
JSONB字段类型
- 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);
}
}
- 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;
}
}
- entity.java (实体类)
@ApiModelProperty("推送信息")
@JsonSerialize(converter = StringToJsonArraySerializer.class)
@JsonDeserialize(converter = JsonArrayToStringDeserialize.class)
private String compareinfo;
Timestamp字段类型
- entity.java (实体类)
@ApiModelProperty(value = "创建时间", example = "xxxx")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Timestamp createtime;
Geomtry字段类型
- 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);
}
}
- 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;
}
}
}
- 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;