适配器通过实现JsonbAdapter接口来配置自定义对象的创建和序列化。 方法AdaptToJson()和AdaptFromJson()被执行序列化和反序列化操作的逻辑覆盖。
下一篇文章介绍了使用自定义序列化器和反序列化器自定义JSON-B的最高级方法。
在此处的示例实现中,已经使用代码实现了AdaptToJson()方法,该代码使用JSON Processing API中的JSON对象构建器将Booklet对象转换为JsonObject 。 AdaptFromJson()方法从JsonObject实例构造Booklet对象。
public class BookletAdapter implements JsonbAdapter<Booklet, JsonObject> {@Overridepublic JsonObject adaptToJson(Booklet booklet) {return Json.createObjectBuilder().add("title", booklet.getTitle()).add("firstName", booklet.getAuthor().getFirstName()).add("lastName", booklet.getAuthor().getLastName()).build();}@Overridepublic 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> {@Overridepublic JsonValue adaptToJson(String fullName) {return Json.createValue(fullName.subSequence(0, 1).toString());}@Overridepublic 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