数据库字段类型为json时,实体类选择list、map类型
private List<Map<String,Object>> other;
数据转换
因为数据库json数据和list传数据的时候会出现格式转换错误
所以需要类型处理器进行处理
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class JsonTypeHandler extends BaseTypeHandler<List<Map<String, Object>>> {
private static final ObjectMapper objectMapper = new ObjectMapper();
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<Map<String, Object>> parameter, JdbcType jdbcType) throws SQLException {
try {
ps.setString(i, objectMapper.writeValueAsString(parameter));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
@Override
public List<Map<String, Object>> getNullableResult(ResultSet rs, String columnName) throws SQLException {
try {
return objectMapper.readValue(rs.getString(columnName), new TypeReference<List<Map<String, Object>>>() {});
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
@Override
public List<Map<String, Object>> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
try {
return objectMapper.readValue(rs.getString(columnIndex), new TypeReference<List<Map<String, Object>>>() {});
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
@Override
public List<Map<String, Object>> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
try {
return objectMapper.readValue(cs.getString(columnIndex), new TypeReference<List<Map<String, Object>>>() {});
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}
实体类属性添加注解
@TableField(typeHandler = JsonTypeHandler.class)
private List<Map<String,Object>> other;
postman请求数据json示例
{
"id": 1,
"flowId": 123,
"name": "Sample Flow",
"text": "This is some sample text.",
"type": 2,
"refId": [
{
"key1": "value1",
"key2": "value2"
},
{
"key3": "value3",
"key4": "value4"
}
],
"nextId": [
{
"key5": "value5",
"key6": "value6"
},
{
"key7": "value7",
"key8": "value8"
}
],
"other": [
{
"key9": "value9",
"key10": "value10"
},
{
"key11": "value11",
"key12": "value12"
}
]
}