Json-类型映射使用TypeFactory或者TypeReference

当你需要将JSON数据转换为Java中的复杂类型时,可以使用Jackson库中的TypeFactory或

者TypeReference。这两种方式可以帮助你处理复杂的泛型类型,例如 List<Map<String,

Object>> 或者 Map<String, List<Object>>。

示例 1: 使用 TypeFactory 和 TypeReference

假设你有一个 JSON 字符串,其结构如下:

{
  "people": [
    {
      "name": "Alice",
      "age": 30
    },
    {
      "name": "Bob",
      "age": 25
    }
  ]
}

1. 定义Person类

public class Person {
    private String name;
    private int age;

    // 构造函数、getter 和 setter
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        thi
@MappedJdbcTypes(JdbcType.VARCHAR) @MappedTypes(Map.class) public class StringToIntegerMapTypeHandler extends BaseTypeHandler<Map<String, Integer>> { private static final ObjectMapper objectMapper = new ObjectMapper(); // 定义Map的泛型类型 private static final JavaType javaType = TypeFactory.defaultInstance() .constructMapType(HashMap.class, String.class, Integer.class); @Override public void setNonNullParameter(PreparedStatement ps, int i, Map<String, Integer> parameter, JdbcType jdbcType) throws SQLException { try { String json = objectMapper.writeValueAsString(parameter); ps.setObject(i, json); // 使用setObject而非setString } catch (JsonProcessingException e) { throw new SQLException("Error converting map to JSON", e); } } @Override public Map<String, Integer> getNullableResult(ResultSet rs, String columnName) throws SQLException { return parseJsonToMap(rs.getString(columnName)); } @Override public Map<String, Integer> getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return parseJsonToMap(rs.getString(columnIndex)); } @Override public Map<String, Integer> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return parseJsonToMap(cs.getString(columnIndex)); } private Map<String, Integer> parseJsonToMap(String jsonString) { System.out.println(jsonString); System.out.println(1); if (StringUtils.isBlank(jsonString)) { return new HashMap<>(); } try { return objectMapper.readValue(jsonString, javaType); } catch (JsonProcessingException e) { throw new RuntimeException("Error parsing JSON to map", e); } } }为什么插入的时候调用查询时不调用
最新发布
05-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值