这是没有 get/set-ters 的 Retrofit POJO 的正确方法吗?

Is this the right approach to Retrofit POJO without get/set-ters?

简介

我的代码运行良好。我很想知道这种方法对于这个特定用例是否 正确 因为我找不到 使用 GSON 或其他 JSON 解析库但仅使用 POJO 来保存数据。

(注意,一段时间以来我一直在尝试格式化我的代码!很抱歉)

对于这个例子,我从 TMDB 的 API 请求数据:.../3/movie/{id}?API_KEY=x

在JSON中返回的数据(减少。请关注"reviews"对象)

{
"vote_count":2034,
"reviews":{
    "page":1,
    "results":[
        {
            "id":"55660928c3a3687ad7001db1",
            "author":"Phileas Fogg",
            "content":"Fabulous action movie. Lots of interesting characters. They don't make many movies like this. The whole movie from start to finish was entertaining I'm looking forward to seeing it again. I definitely recommend seeing it.",
            "url":"http://j.mp/1HLTNzT"
        },
        {
            "id":"55732a53925141456e000639",
            "author":"Andres Gomez",
            "content":"Good action movie with a decent script for the genre. The photography is really good too but, in the end, it is quite repeating itself from beginning to end and the stormy OST is exhausting.",
            "url":"http://j.mp/1dUnvpG"
        }
    ],
    "total_pages":1,
    "total_results":2
},
"trailers":{
    "quicktime":[

    ],
    "youtube":[
        {
            "name":"Trailers From Hell",
            "size":"HD",
            "source":"FRDdRto_3SA",
            "type":"Featurette"
        },
        {
            "name":"Trailer 2",
            "size":"HD",
            "source":"jnsgdqppAYA",
            "type":"Trailer"
        },
        {
            "name":"Official Trailer #1",
            "size":"HD",
            "source":"YWNWi-ZWL3c",
            "type":"Trailer"
        }
    ]
}

方法

  1. 创建改造界面。希望我能在这里展示它,但格式正在变得精神。

  2. 这是奇怪的部分。我创建了一个如下所示的 POJO,它工作正常。

    public class TMDBMovieDetailsRetrofitObj {

    // movie/id 端点中可用的运行时 public 字符串运行时;

    public 字符串标语;

    public评论评论;

    public class 评论{

    public Reviews() { reviews = new Reviews(); }
    
    // To know how many reviews we have got!
    public String total_results;
    
    public List<ReviewResults> results;
    
    public class ReviewResults{
    
        public ReviewResults() {
            results = new ArrayList<>();
        }
    
        public String id;
        public String author;
        public String content;
        public String url;
    }
    

    } }

没有创建 getter 和 setter 方法,因为我有另一个 TMDBMovie 对象,它包含大量信息并且有自己的 getter 和 setter 方法。

  1. 基本上,我正在使用这个 POJO 作为中间传输对象……

我的问题

你觉得这两点可以吗:

  1. 这个 POJO 有 3 层 public 嵌套 class,Retrofit 处理得很好。

  2. 我有一个 TMDBMovie 对象,它有自己的 getter 和 setter 方法,我通过这些方法进行检查、验证和少量数据操作。如果 public 变量正常,这个 POJO 甚至需要 getter 和 setter 方法吗?

命名您的 class 变量,以便将 JSON 转换为 Java 对象是个好主意。但是,classes 不需要嵌套。您可以在其他地方定义 List<Result> results 并定义结果 class。希望这是清楚的。

  1. 不,它们的三层嵌套 class 定义令人困惑,可能会增加维护问题。此外,试图初始化外部 classes 字段的嵌套 classes 构造函数有点粗略。只需实施每个 class 一个自己的 --

TMDBMovieDetailsRetrofitObj.java

public class TMDBMovieDetailsRetrofitObj {
    // Runtime available in movie/id endpoint
    public String runtime;
    public String tagline;
    public Reviews reviews;
}

Review.java

public class Reviews {
    // To know how many reviews we have got!
    public String total_results;
    public List<ReviewResults> results;
}

ReviewResults.java

public class ReviewResults {
    public String id;
    public String author;
    public String content;
    public String url;
}
  1. 这是一个有争议的问题和个人喜好。对于仅用于没有其他方法和行为的数据的对象,尤其是像您这样的短期数据操作对象,跳过 getter 和 setter 通常是可以接受的,尤其是在 Android 上。其他人可能有不同的看法。如果您的老板或老师对此事有意见,请按照他们的要求去做!