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

时间:2015-09-05 12:58:25

标签: java android json gson retrofit

简介

我的代码工作正常。我很想知道这个特定用例的方法是否,因为我找不到改进的例子使用GSON或其他JSON解析库但只是使用POJO来保存数据。

(注意,我一直在尝试格式化我的代码!对此抱歉)

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

以JSON格式返回的数据(已减少。请关注“评论”对象)

{
"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. 创建了Retrofit Interface。希望我能在这里展示,但格式是精神上的。

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

    public class TMDBMovieDetailsRetrofitObj {

    //在movie / id端点中可用的运行时 public String runtime;

    public String tagline;

    公众评论评论;

    公共课程评论{

    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;
    }
    

    } }

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

    1. 基本上,我使用这个POJO作为中间转移对象的东西......
    2. 我的问题

      你认为这两点是否正常:

      1. 这个POJO有3个级别的公共嵌套类,Retrofit处理得非常好。

      2. 我有一个TMDBMovie对象,它有自己的getter和setter方法,通过它我可以进行检查,验证和次要数据操作。如果公共变量正常,这个POJO是否需要getter和setter方法?

2 个答案:

答案 0 :(得分:1)

命名您的类变量,以便将JSON转换为Java对象是一个好主意。但是,这些类不需要嵌套。您可以定义List<Result> results并在其他位置定义Result类。希望这很清楚。

答案 1 :(得分:1)

  1. 不,他们三个级别的嵌套类定义令人困惑,可能会增加维护问题。此外,尝试初始化外部类字段的嵌套类构造函数有点粗略。只需实现自己的每个类 -
  2. 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上。其他人可能有不同的意见。如果您有老板或老师对此事有意见,请按照他们的意愿行事!