必要なのは、Coordinateクラスの2つの簡単なアノテーションです。
@JsonFormat(shape = Shape.ARRAY)
@JsonPropertyOrder({"x", "y"})
public static class Coordinate {
public double x;
public double y;
public Coordinate() {}
public Coordinate(double x, double y) {
this.x = x;
this.y = y;
}
}
public void test() throws IOException {
List<Coordinate> p = new ArrayList<Coordinate>();
p.add(new Coordinate(1, 2));
p.add(new Coordinate(3, 4));
ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = mapper.writeValueAsString(p);
System.out.println(writeValueAsString);
CollectionType collectionType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, Coordinate.class);
List<Coordinate> readValue = mapper.readValue(writeValueAsString, collectionType);
assertEquals(readValue.size(), 2);
assertEquals(readValue.get(0).x, 1, 0.0);
assertEquals(readValue.get(0).y, 2, 0.0);
assertEquals(readValue.get(1).x, 3, 0.0);
assertEquals(readValue.get(1).y, 4, 0.0);
}
中間プロセスは必要ありません。ジャクソンがすべての作業を行います。@JsonFormatアノテーションは、期待するものがオブジェクトではなく配列であることをJacksonに通知し、@ JsonPropertyOrderは、プロパティが常に適切な順序でデコードされるようにします。これには、同じ形式でデータをエンコードすることもできるという追加のボーナスがあります。
これらのアノテーションを追加するためのCoordinateクラスにアクセスできない場合は、Jacksonのミックスイン機能を使用してください。