mybatisplus GsonTypeHandler Could not write JSON: java.lang.Double cannot be cast to java.lang.Long
时间: 2024-01-01 16:50:05 浏览: 189
mybatis-plus读取JSON类型的方法实现
这个问题通常是因为 MybatisPlus 默认将所有数据类型转换成 Long 类型,但是在某些情况下,数据类型是 Double 类型,导致转换失败。解决这个问题的方法是使用 MybatisPlus 提供的 `ITypeHandler` 接口来自定义类型处理器。
首先,创建一个自定义的 `GsonTypeHandler` 类,并实现 `ITypeHandler` 接口:
```java
public class GsonTypeHandler<T> implements ITypeHandler<T> {
private Gson gson = new Gson();
@Override
public void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, gson.toJson(parameter));
}
@Override
public T getResult(ResultSet rs, String columnName) throws SQLException {
return gson.fromJson(rs.getString(columnName), new TypeToken<T>(){}.getType());
}
@Override
public T getResult(ResultSet rs, int columnIndex) throws SQLException {
return gson.fromJson(rs.getString(columnIndex), new TypeToken<T>(){}.getType());
}
@Override
public T getResult(CallableStatement cs, int columnIndex) throws SQLException {
return gson.fromJson(cs.getString(columnIndex), new TypeToken<T>(){}.getType());
}
}
```
然后,在需要使用 `GsonTypeHandler` 的地方,使用 `@TableField` 注解来指定字段类型处理器:
```java
public class User {
@TableField(typeHandler = GsonTypeHandler.class)
private Double score;
// ...
}
```
这样就可以解决该问题。
阅读全文