适配器通过实现JsonbAdapter接口来配置自定义对象的创建和序列化。 方法AdaptToJson()和AdaptFromJson()被执行序列化和反序列化操作的逻辑覆盖。
下一篇文章介绍了使用自定义序列化器和反序列化器自定义JSON-B的最高级方法。
在此处的示例实现中,已经使用代码实现了AdaptToJson()方法,该代码使用JSON Processing API中的JSON对象构建器将Booklet对象转换为JsonObject 。 AdaptFromJson()方法从JsonObject实例构造Booklet对象。
public class BookletAdapter implements JsonbAdapter<Booklet, JsonObject> {
@Override
public JsonObject adaptToJson(Booklet booklet) {
return Json.createObjectBuilder()
.add("title", booklet.getTitle())
.add("firstName", booklet.getAuthor().getFirstName())
.add("lastName", booklet.getAuthor().getLastName())
.build();
}
@Override
public Booklet adaptFromJson(JsonObject json) {
Booklet booklet = new Booklet(json.getString("title"),
new Author(json.getString("firstName"),
json.getString("lastName")));
return booklet;
}
}
如您所见, AdaptToJson()方法将Author对象展平为两个属性: firstName和lastName 。 AdaptFromJson()方法将重建Author对象并输出Booklet实例。
JsonbAdapter非常灵活,可用于自定义单个字段以及整个对象的序列化和反序列化 。
这是通过标记应使用JsonbTypeAdapter注释自定义的字段,方法或类并将其传递给要使用的JsonbAdapter的类名来实现的。
此处显示了示例实现 。 firstName字段标记有JsonbTypeAdapter批注和指定为适配器的FirstNameAdapter类。
public class Author {
@JsonbTypeAdapter(FirstNameAdapter.class)
private String firstName;
}
public class FirstNameAdapter implements JsonbAdapter<String, JsonValue> {
@Override
public JsonValue adaptToJson(String fullName) {
return Json.createValue(fullName.subSequence(0, 1).toString());
}
@Override
public String adaptFromJson(JsonValue json) {
return json.toString();
}
}
最后,这是使用自定义序列化器和反序列化器自定义JSON-B的最先进方法。
除了我在这些博客文章中讨论的内容之外,关于JSON Binding API还有更多的知识要知道。
翻译自: https://www.javacodegeeks.com/2018/05/get-to-know-adapters-json-binding-overview-series.html