Согласно официальному руководству пользователя, http://json -b.net / users-guide.html , движок должен сериализовать любые найденные им свойства с использованием методов доступа к компонентам или без них (Я понимаю, что в примере с Dog используются открытые поля, но см. Пример Person для личных полей).
С учетом этих классов:
public class Rectangle {
private double length1 = 0.0;
@JsonbProperty("length2")
private double length2 = 0.0;
public double width = 0.0;
}
public class Rectangle2 {
@JsonbProperty
private double length = 0.0;
private double width = 0.0;
public double getLength() {
return length;
}
public double getWidth() {
return width;
}
}
Когда я сериализую его так, как это:
public class App2 {
public static void main(String... argv) {
Jsonb jsonb = JsonbBuilder.create();
System.out.println("Rectangle: " + jsonb.toJson(new Rectangle()));
System.out.println("Rectangle2: " + jsonb.toJson(new Rectangle2()));
}
}
Вывод таков:
Rectangle: {"width":0.0}
Rectangle2: {"length":0.0,"width":0.0}
В Rectangle я вижу только сериализацию, потому что она общедоступна.length1 и length2 игнорируются, поскольку они являются частными, даже если для length2 существует аннотация свойства.Rectangle2 полностью сериализован, так как имеет методы bean-компонентов.
Должен ли он быть таким?Требование, чтобы я сделал все поля открытыми и изменяемыми для включения сериализации, кажется огромным ограничением.
Мои зависимости настроены так:
<dependency>
<groupId>javax.json.bind</groupId>
<artifactId>javax.json.bind-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.4</version>
</dependency>