Jaxb - 列表元素的map属性

时间:2014-06-02 17:00:03

标签: java xml jaxb

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

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

我需要每个“时间”对象的地图日属性,但看起来它没有像我期望的那样工作。

继承我的课程(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”属性以使其不为空?

1 个答案:

答案 0 :(得分:1)

以下行将抛出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;