使用 JAXB 使用 toString 映射元素



我正在使用JAXB将类映射到JSON(使用genson)。我想将某些类型嵌入为纯字符串,例如:

@XmlRootElement
class Request {
    private LocalDateTime receivedAt;
}

映射到哪个

{  
   "receivedAt":{  
      "dayOfMonth":21,
      "dayOfWeek":"WEDNESDAY",
      "dayOfYear":21,
      "hour":12,
      "minute":33,
      "month":"JANUARY",
      "monthValue":1,
      "nano":110000000,
      "second":51,
      "year":2015
   }
}

我宁愿让它看起来像

{  
   "receivedAt":"2015-01-21T12:33:51+00:00"
}

即在条目值上使用toString()。这可能吗?

窍是创建一个XmlAdapter类,帮助Jaxb转换LocalDateTime 到字符串,从字符串返回到 LocalDateTime。

像这样:

public class LocalDateTimeXmlAdapter extends XmlAdapter<String, LocalDateTime> {
    @Override
    public String marshal(LocalDateTime arg0) throws Exception {
        return arg0.toString();
    }
    @Override
    public LocalDateTime unmarshal(String arg0) throws Exception {
        return new LocalDateTime(arg0);
    }
}

然后,要么用@XmlJavaTypeAdapter批注你的字段,要么批注你的整个包(如果你希望它应用于任何序列化的 LocalDateTime 字段),以便 JaxB 实例化你的 XmlAdapter,每当它找到要封送(或取消封送)的 LocaleDateTime 时,它就会调用你的 XmlAdapater 的适当方法。

如果您放在包级别:

@XmlJavaTypeAdapters(
        @XmlJavaTypeAdapter(type=LocalDateTime.class, value=LocalDateTimeXmlAdapter.class)
        )

如果你把它放在你的田地上:

@XmlJavaTypeAdapter(value=LocalDateTimeXmlAdapter.class)
private LocalDateTime receivedAt;

另请参阅此链接以获取更多示例

最新更新