java - Jaxb - 列表元素的映射属性

标签 java xml jaxb

嘿,我的 xml 看起来像这样:

<forecast>
 <time day="2014-06-02">
  <symbol></symbol>
 </time>
 <time day="2014-06-03">
  <symbol></symbol>
 </time>
</forecast>

我需要每个“时间”对象的 map 日属性,但看起来它没有按我的预期工作。

这是我的类(class)(java):

public class Forecast {
    @XmlElement
    public List<WeatherEvent> time;
}

public class WeatherEvent {
    @XmlAttribute(name = "day")
    @XmlJavaTypeAdapter(DateAdapter.class)
    public Date day;
    @XmlElement
    public Symbol symbol;
}

public class DateAdapter extends XmlAdapter<String, Date> {

    private final SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyy-MM-dd'T'HH:mm:ss");

    @Override
    public String marshal(Date v) throws Exception {
        return dateFormat.format(v);
    }

    @Override
    public Date unmarshal(String v) throws Exception {
        Date date = dateFormat.parse(v);
        if (date == null) {
            SimpleDateFormat simplierFormat = new SimpleDateFormat("yyyy-MM-dd");
            date = simplierFormat.parse(v);
        }
        return date;
    }
}

如何正确映射“day”属性以使其不为空?

最佳答案

当日期如下所示时,以下行将抛出 ParseException 并退出该方法,并且永远不会到达下面的逻辑:2014-06-02

Date date = dateFormat.parse(v);

您需要捕获异常并忽略它,然后对其应用第二个格式化程序。

Date date = null;
try {
    Date date = dateFormat.parse(v);
} catch(ParseException e) {
    SimpleDateFormat simplierFormat = new SimpleDateFormat("yyyy-MM-dd");
    date = simplierFormat.parse(v);
}
return date;

关于java - Jaxb - 列表元素的映射属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23999698/

相关文章:

android - Google Analytics XML 配置文件与 JSON?

java - 如何在 Java 中使用 XPath 解析带有内部引用的 SOAP 响应

java - JAXB 不想使用接口(interface)

java - 两种不同的架构和 JAXB Marshaller

java - Java中的数字四舍五入到小数点后两位

java - JAXB 内部元素被忽略

c# - 可移植 C# 数据库

java - 使用 Eclipse 从 JAXB 生成示例 XML

java - 将 Json 解析为 Java 对象

java - JCE 提供者实现