@TableField(typeHandler= FastjsonTypeHandler.class) private JSONArray labels; 去接pgsql数据库查出来的json类型数据,映射为null
时间: 2024-03-05 20:50:37 浏览: 100
如果你使用的是PostgreSQL数据库,并且查询出来的JSON类型数据在Java中映射为null,你可以尝试使用`JsonNode`类型来接收数据。同时,你也需要在`pom.xml`文件中添加`jackson-databind`的依赖。
代码示例:
```java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonNodeHandler implements TypeHandler<JsonNode> {
private static final ObjectMapper objectMapper = new ObjectMapper();
@Override
public void setParameter(PreparedStatement preparedStatement, int i, JsonNode jsonNode, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, jsonNode.toString());
}
@Override
public JsonNode getResult(ResultSet resultSet, String s) throws SQLException {
return parseJson(resultSet.getString(s));
}
@Override
public JsonNode getResult(ResultSet resultSet, int i) throws SQLException {
return parseJson(resultSet.getString(i));
}
@Override
public JsonNode getResult(CallableStatement callableStatement, int i) throws SQLException {
return parseJson(callableStatement.getString(i));
}
private JsonNode parseJson(String json) {
if (json == null || json.isEmpty()) {
return null;
}
try {
return objectMapper.readTree(json);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
```
这里使用了`jackson-databind`库中的`ObjectMapper`来将JSON字符串转换为`JsonNode`类型。
然后,在实体类的属性上加上`@TableField(typeHandler = JsonNodeHandler.class)`注解,表示使用自定义的类型处理器来处理该属性。
代码示例:
```java
import com.fasterxml.jackson.databind.JsonNode;
public class MyEntity {
@TableField(typeHandler = JsonNodeHandler.class)
private JsonNode labels;
// getter和setter方法省略
}
```
在`pom.xml`文件中添加`jackson-databind`的依赖:
```xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
```
这样,当你从PostgreSQL数据库中查询出JSON类型的数据,映射到实体类时,就能够正确地转换为`JsonNode`类型了。
阅读全文