添加 jsonb 字段的处理
This commit is contained in:
22
pom.xml
22
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>ltd.llvy</groupId>
|
<groupId>ltd.llvy</groupId>
|
||||||
<artifactId>handler</artifactId>
|
<artifactId>handler</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0.2</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
@ -45,9 +45,29 @@
|
|||||||
<artifactId>postgis-jdbc</artifactId>
|
<artifactId>postgis-jdbc</artifactId>
|
||||||
<version>2.5.1</version>
|
<version>2.5.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||||
|
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||||
|
<version>2.19.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>central</id>
|
||||||
|
<url>https://maven.aliyun.com/repository/public</url>
|
||||||
|
<releases>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</releases>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>jitpack.io</id>
|
||||||
|
<url>https://jitpack.io</url>
|
||||||
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>gitea</id>
|
<id>gitea</id>
|
||||||
<url>https://www.llvy.ltd/api/packages/llvy.ltd/maven</url>
|
<url>https://www.llvy.ltd/api/packages/llvy.ltd/maven</url>
|
||||||
|
80
src/main/java/ltd/llvy/postgis/handler/JsonbTypeHandler.java
Normal file
80
src/main/java/ltd/llvy/postgis/handler/JsonbTypeHandler.java
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package ltd.llvy.postgis.handler;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||||
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||||
|
import java.sql.CallableStatement;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import org.apache.ibatis.type.BaseTypeHandler;
|
||||||
|
import org.apache.ibatis.type.JdbcType;
|
||||||
|
import org.apache.ibatis.type.MappedJdbcTypes;
|
||||||
|
import org.apache.ibatis.type.MappedTypes;
|
||||||
|
import org.postgresql.util.PGobject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (JsonbTypeHandler)
|
||||||
|
*
|
||||||
|
* @author zweiandlen
|
||||||
|
* @since 2025/6/4 16:30
|
||||||
|
*/
|
||||||
|
@MappedTypes({JsonNode.class})
|
||||||
|
@MappedJdbcTypes(JdbcType.JAVA_OBJECT)
|
||||||
|
public class JsonbTypeHandler extends BaseTypeHandler<JsonNode> {
|
||||||
|
|
||||||
|
private static final PGobject JSON_OBJECT;
|
||||||
|
|
||||||
|
private static final ObjectMapper OBJECT_MAPPER;
|
||||||
|
|
||||||
|
static {
|
||||||
|
JSON_OBJECT = new PGobject();
|
||||||
|
//
|
||||||
|
OBJECT_MAPPER = new ObjectMapper();
|
||||||
|
// 禁用日期作为时间戳的序列化方式
|
||||||
|
OBJECT_MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||||
|
// 注册Java 8时间模块
|
||||||
|
OBJECT_MAPPER.registerModule(new JavaTimeModule());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setNonNullParameter(
|
||||||
|
PreparedStatement ps, int i, JsonNode parameter, JdbcType jdbcType) throws SQLException {
|
||||||
|
JSON_OBJECT.setType("jsonb");
|
||||||
|
JSON_OBJECT.setValue(toJson(parameter));
|
||||||
|
ps.setObject(i, JSON_OBJECT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonNode getNullableResult(ResultSet rs, String columnName) throws SQLException {
|
||||||
|
return parse(rs.getString(columnName));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonNode getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
|
||||||
|
return parse(rs.getString(columnIndex));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonNode getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
|
||||||
|
return parse(cs.getString(columnIndex));
|
||||||
|
}
|
||||||
|
|
||||||
|
private JsonNode parse(String json) {
|
||||||
|
try {
|
||||||
|
return OBJECT_MAPPER.readValue(json, JsonNode.class);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String toJson(Object obj) {
|
||||||
|
try {
|
||||||
|
return OBJECT_MAPPER.writeValueAsString(obj);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user