认识适配器:JSON绑定概述系列

适配器通过实现JsonbAdapter接口来配置自定义对象的创建和序列化。 方法AdaptToJson()AdaptFromJson()被执行序列化和反序列化操作的逻辑覆盖。

下一篇文章介绍了使用自定义序列化器和反序列化器自定义JSON-B的最高级方法。

此处的示例实现中,已经使用代码实现了AdaptToJson()方法,该代码使用JSON Processing API中的JSON对象构建器将Booklet对象转换为JsonObjectAdaptFromJson()方法从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对象展为两个属性: firstNamelastNameAdaptFromJson()方法将重建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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值