根据我假设是官方用户指南http://json-b.net/users-guide.html,引擎应该序列化它找到的任何属性,有或没有 bean 访问器方法(我意识到 Dog 示例使用 public字段,但请参阅私有字段的 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>