这个问题是因为转换器使用的是默认的typeHandler = JacksonTypeHandler.class,它会将复杂对象其中的对象序列化为linkedhashmap
解决这个问题需要自定义类型转换器,将代码中的泛型换成自己的泛型即可。
package com.zshs.aiplatform.config;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zshs.aiplatform.common.Node;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class NodeTypeHandler extends BaseTypeHandler<List<Node>> {
private static final ObjectMapper objectMapper = new ObjectMapper();
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<Node> parameter, JdbcType jdbcType) throws SQLException {
try {
String json = objectMapper.writeValueAsString(parameter);
ps.setString(i, json);
} catch (JsonProcessingException e) {
throw new SQLException("Error converting object to JSON string", e);
}
}
@Override
public List<Node> getNullableResult(ResultSet rs, String columnName) throws SQLException {
String json = rs.getString(columnName);
return parseJson(json);
}
@Override
public List<Node> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String json = rs.getString(columnIndex);
return parseJson(json);
}
@Override
public List<Node> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String json = cs.getString(columnIndex);
return parseJson(json);
}
private List<Node> parseJson(String json) throws SQLException {
if (json == null) {
return null;
}
try {
return objectMapper.readValue(json, objectMapper.getTypeFactory().constructCollectionType(List.class, Node.class));
} catch (IOException e) {
throw new SQLException("Error parsing JSON string", e);
}
}
}