JAXB:将XML属性值映射到自定义数据类型

时间:2015-01-21 19:13:29

标签: java xml jaxb

假设您有一个包含元素的XML,如下所示:

<card expirydate="012017"> <!-- various attributes exists but it's unnecessary for this case.

正如您所看到的,前2个字符表示月份,最后4个数字表示年份。

我想将它建模为Month对象,如下所示:

/**
 * @author Buhake Sindi
 * @since 19 January 2015
 *
 */
public class Month implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -3746059271757081350L;

    private int month;
    private int year;

    /**
     * 
     */
    public Month() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param month
     * @param year
     */
    public Month(int month, int year) {
        super();
        PreConditions.checkArgument(month >= 1 && month <= 12, "Invalid month specified.");
        this.month = month;
        this.year = year;
    }

    /**
     * @return the month
     */
    public int getMonth() {
        return month;
    }

    /**
     * @param month the month to set
     */
    public void setMonth(int month) {
        this.month = month;
    }

    /**
     * @return the year
     */
    public int getYear() {
        return year;
    }

    /**
     * @param year the year to set
     */
    public void setYear(int year) {
        this.year = year;
    }
}

我在JAXB中使用什么类型的转换器/适配器将属性映射到Object,反之亦然?

1 个答案:

答案 0 :(得分:1)

您可以为此用例创建XmlAdapter,将Month转换为String

public class MonthAdapter extends XmlAdapter<String, Month>

然后在marshal / unmarshal方法中,您可以使用自己的自定义逻辑在MonthString之间进行转换。