このクラスのインスタンスはラージ オブジェクト グラフの一部であり、オブジェクト グラフのルートにはありません。
public class Day
{
public Day(LocalDate date, List<LocalTime> times)
{
this.date = date;
this.times = times;
}
public Day()
{
this(null, null);
}
public LocalDate getDate()
{
return date;
}
public List<LocalTime> getTimes()
{
return times;
}
private final LocalDate date;
private final List<LocalTime> times;
}
オブジェクト グラフは、Jersey と JAXB を使用して JSON に変換されます。とにXmlAdapter
登録しました。LocalDate
LocalTime
問題は、date
プロパティではなくプロパティに対してのみ機能することtimes
です。times
これは、単一の値ではなくリストであるという事実と関係があると思われます。times
では、Jersey/JAXB に、登録された .xml を使用してリスト内の各要素をマーシャリングするように指示するにはどうすればよいXmlAdapter
でしょうか?
アップデート:
スカラープロパティを追加し、JSON で予想される出力を観察することで、スカラー プロパティLocalTime
に対してマーシャリングが実際に機能していることを確認しました。LocalTime
LocalTime
完全を期すために、package-info.java は次のとおりです。
@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(value = LocalDateAdapter.class, type = LocalDate.class),
@XmlJavaTypeAdapter(value = LocalTimeAdapter.class, type = LocalTime.class)
})
package same.package.as.everything.else;
LocalDateAdapter
:
public class LocalDateAdapter extends XmlAdapter<String, LocalDate>
{
@Override
public LocalDate unmarshal(String v) throws Exception
{
return formatter.parseLocalDate(v);
}
@Override
public String marshal(LocalDate v) throws Exception
{
return formatter.print(v);
}
private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd");
}
LocalTimeAdapter
:
public class LocalTimeAdapter extends XmlAdapter<String, LocalTime>
{
@Override
public LocalTime unmarshal(String v) throws Exception
{
return formatter.parseLocalTime(v);
}
@Override
public String marshal(LocalTime v) throws Exception
{
return formatter.print(v);
}
private final DateTimeFormatter formatter = DateTimeFormat.forPattern("HHmm");