使用简单 XML 和 Gson 库的 REST 客户端:使用常见的 POJO 或适配器模式?

发布于 2024-12-13 12:27:40 字数 1039 浏览 2 评论 0原文

在我的 java 应用程序(特别是 Android 应用程序)中,我进行 REST 调用 (GET)。响应可以是 XML 或 JSON。我使用策略模式,它根据响应的内容类型决定使用哪个解析器。

如果响应是 XML,我使用 Simple 库将响应解析为 POJO,如果响应是 JSON,我使用 Gson 库。

现在我的问题是:拥有一个同时包含 Simple 和 Gson 注释的 POJO 有什么好处吗?或者,最好将 2 个 POJO 分开,然后使用适配器(或者包装器)来“转换”为通用 POJO?换句话说,以下方法的优缺点是什么?

方法 1:

class PojoCommon {

    @SimpleXmlAnnotations
    @GsonAnnotations
    private int age;

    @SimpleXmlAnnotations
    @GsonAnnotations
    private String name;

    //Constructors, Getters and Setters ...
}

方法 2:

class Pojo{

    private int age;
    private String name;
}

class PojoXml{
    @SimpleXmlAnnotations
    private int age;

    @SimpleXmlAnnotations
    private String name;

    public Pojo toGenericPojo(){
        return new Pojo(this.age, this.name);
    }
}

class PojoJson{

    @GsonAnnotations
    private int age;

    @GsonAnnotations
    private String name;

    public Pojo toGenericPojo(){
        return new Pojo(this.age, this.name);
    }
}

In my java app (specifically, Android app), I make a REST call (GET). The response could be either XML or JSON. I use a Strategy Pattern which decides what parser to employ based on the Content Type of the response.

If the response is XML, I use Simple library to parse the response into my POJOs, and if the response is JSON, I use Gson library.

Now my question: Is there any benefit in having a single POJO which containing both Simple and Gson annotations? Or, is it better to separate out the 2 POJOs and then have an Adapter (or maybe Wrapper) to "convert" to a generic POJO? In other words, what are the pros and cons of the following approaches?

Approach 1:

class PojoCommon {

    @SimpleXmlAnnotations
    @GsonAnnotations
    private int age;

    @SimpleXmlAnnotations
    @GsonAnnotations
    private String name;

    //Constructors, Getters and Setters ...
}

Approach 2:

class Pojo{

    private int age;
    private String name;
}

class PojoXml{
    @SimpleXmlAnnotations
    private int age;

    @SimpleXmlAnnotations
    private String name;

    public Pojo toGenericPojo(){
        return new Pojo(this.age, this.name);
    }
}

class PojoJson{

    @GsonAnnotations
    private int age;

    @GsonAnnotations
    private String name;

    public Pojo toGenericPojo(){
        return new Pojo(this.age, this.name);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

送舟行 2024-12-20 12:27:40

虽然方法 1 在维护方面更好,但您已经回答了您的问题,因为从长远来看,任何拟议的更改都会使事情变得复杂。

我的建议是选择第二种,为每种类型创建 POJO,并使用包装器/适配器方法进行转换

Though Approach1 is better in term of maintenance but you already have answered your question as in long term with any proposed changes it can make things complex.

My Suggestion is to go for second one create POJO for each individual type and use a wrapper/adapter approach for the conversion

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文