gpt4 book ai didi

java - Jackson - 如何编写自定义解串器

转载 作者:行者123 更新时间:2023-12-01 12:40:01 27 4
gpt4 key购买 nike

我想使用 Jackson 类将我的 HashMap 列表转换为对象列表(我已经读过可以完成)。

我想要序列化的对象看起来像这样......

public class FinancialTransaction {
private Date tranDate;
private String tranDescription;
private Double debit;
private Double credit;
...getters and setters...

我想做这样的事情......

    ArrayList<FinancialTransaction> transactions = 
new ArrayList<FinancialTransaction>();

HashMap<String, String> records = new HashMap<String, String>();
records.put("tranDate", "08/08/2014");
records.put("tranDescription", "08/08/2014");
records.put("debit", "1.50");
records.put("credit", null);true);

for (HashMap<String, String> record : records) {
ObjectMapper m = new ObjectMapper();
FinancialTransaction ft = m.convertValue(record, FinancialTransaction.class);
transactions.add(ft);
}
return transactions;

其中 HashMap 的键值等于 FinancialTransaction 类中的属性名称,但值都是字符串。

因为 HashMap 的所有值都是字符串,所以在尝试从映射转换为对象时出现错误。这让我觉得我需要编写一个自定义反序列化器?有人可以帮我看看我的自定义反序列化器类应该是什么样子吗?或者如果我不需要的话会更好。

谢谢

最佳答案

您不需要编写自定义序列化程序。只要映射条目类型与类字段的类型相对应,Jackson 就可以从映射转换为您的类型。

这是一个例子:

public class JacksonConversion {
public static class FinancialTransaction {
public Date tranDate;
public String tranDescription;
public Double debit;
public Double credit;

@Override
public String toString() {
return "FinancialTransaction{" +
"tranDate=" + tranDate +
", tranDescription='" + tranDescription + '\'' +
", debit=" + debit +
", credit=" + credit +
'}';
}
}

public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map1 = new HashMap<>();
map1.put("tranDate", new Date().getTime());
map1.put("tranDescription", "descr");
map1.put("debit", 123.45);

Map<String, Object> map2 = new HashMap<>();
map2.put("tranDate", new Date().getTime());
map2.put("tranDescription", "descr2");
map2.put("credit", 678.9);

System.out.println(mapper.convertValue(
Arrays.asList(map1, map2),
new TypeReference<List<FinancialTransaction>>() {}));
}
}

输出:

[FinancialTransaction{tranDate=Fri Aug 08 12:24:51 CEST 2014, tranDescription='descr', debit=123.45, credit=null}, FinancialTransaction{tranDate=Fri Aug 08 12:24:51 CEST 2014, tranDescription='descr2', debit=null, credit=678.9}]

关于java - Jackson - 如何编写自定义解串器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25198755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com