gpt4 book ai didi

java - jackson xmlmapper 用于映射 ,对特定标签使用react

转载 作者:行者123 更新时间:2023-11-30 05:31:24 31 4
gpt4 key购买 nike

我有这个 xml 结构:

    <Result>
<ReferenceMin>4</ReferenceMin>
<ReferenceMax>5.65</ReferenceMax>
<PrecedingValue>3.25</PrecedingValue>
<PrecedingDate><Date year="2017" month="04" day="21"/></PrecedingDate>
</Result>

这个xml来自无法控制的第3方服务,它可以包含新字段,或者现有字段可以消失,所以我无法为对象定义严格的结构。正如我所看到的,除了 PrecedingDate 之外,所有字段都可以解析为“String”。

是否可以通过我的 cyustom 策略来教 jackson xmlMapper 使用 PrecedingDate 或 Date 字段?目前它创建具有以下结构的对象:

{PrecedingDate: Date: {year: 2017, month: 04, day: 21}}

我想获取java日期或即时或类似的东西。

最佳答案

您可以实现自定义反序列化器或使用 JsonAnySetter 注释。如何使用注释可以在下面找到:

import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.io.File;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;

public class XmlMapperApp {

public static void main(String[] args) throws Exception {
File xmlFile = new File("./resource/test.xml").getAbsoluteFile();

XmlMapper xmlMapper = new XmlMapper();
System.out.println(xmlMapper.readValue(xmlFile, Result.class));
}
}

class Result {

private Map<String, String> entries = new HashMap<>();
private LocalDate precedingDate;

public Map<String, String> getEntries() {
return entries;
}

public LocalDate getPrecedingDate() {
return precedingDate;
}

@JsonAnySetter
public void setEntry(String key, Object value) {
if ("PrecedingDate".equals(key)) {
Map<String, String> date = (Map<String, String>)((Map) value).get("Date");
precedingDate = LocalDate.of(
Integer.parseInt(date.get("year")),
Integer.parseInt(date.get("month")),
Integer.parseInt(date.get("day")));
} else {
entries.put(key, value.toString());
}
}

@Override
public String toString() {
return "Result{" +
"entries=" + entries +
", precedingDate=" + precedingDate +
'}';
}
}

上面的代码打印:

Result{entries={ReferenceMin=4, PrecedingValue=3.25, ReferenceMax=5.65}, precedingDate=2017-04-21}

关于java - jackson xmlmapper 用于映射 <String, Object>,对特定标签使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57461455/

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