如何正确使用Jackson,Dropwizard和JSON模式

时间:2016-02-23 05:41:55

标签: java json api jackson dropwizard

我正在努力研究如何构建我的JSON对象以最好地遵守http://jsonapi.org/format/

如果我使用以下课程:

页面(主要对象)

public class Page {

    @Id
    @ObjectId
    private String id;  //Used for mongodb

    @JsonProperty
    private String type;

    @JsonProperty
    private Attribute attributes;

    @JsonProperty
    private Meta meta;

    public Page() {
        // Jackson deserialization
    }

    // Getters and setters
}

属性(嵌入页面)

public class Attribute {

    @JsonProperty
    private Date created = new Date();

    @JsonProperty
    private String title;

    @JsonProperty
    private String body;

    public Attribute() {
        // Jackson deserialization
    }

    public Attribute(Date created, String title, String body) {
        this.created = created;
        this.title = title;
        this.body = body;
    }

    // Getters and setters

}

Meta(嵌入页面)

public class Meta {

    @JsonProperty
    private List<String> authors;

    public Meta() {
    }

    public Meta(List<String> authors) {
        this.authors = authors;
    }

    // Getters and setters
}

我可以使用以下帖子创建此对象:

{
    "type": "page",

    "attributes": {
        "title": "This is the title",
        "body": "<p>This is a long section of html, other stuff</p>"
    }, 

    "meta": {
        "authors": [
            "Steve",
            "John",
            "Sam"
        ]
    }
}

创建生成的JSON对象:

{  
   id:"56cbed5036f66b05dc2df841",
   type:"page",
   attributes:{  
      created:1456205138886,
      title:"This is the title",
      body:"<p>This is a long section of html, other stuff</p>"
   },
   meta:{  
      authors:[  
         "Steve",
         "John",
         "Sam"
      ]
   }
}

问题: 以我创建嵌套JSON对象的最佳/正确方式创建多个类,我是否应该尝试将所有内容包装在“data:”中,根据上面的链接,状态是必须的?如果是这种情况,我应该创建一个名为Data的POJO,它包含Page对象吗?

在寻找有关此类事物的信息时,我似乎能够找到的是人们如何将JSON反序列化为POJO,这不是我想要的。

真的想在这里找到一些编写API的最佳实践。

1 个答案:

答案 0 :(得分:0)

您应该从对象公开的“行为”以及您希望API公开的方式开始。 虽然没有银弹,但有大量的文献可以指导您如何建模API(以及您的对象)的正确方向

这里有几个链接:

就个人而言,而且 - 在一般情况下 - 我创建了POJO,但同样@ cricket_007也提到了它的意见。

HTH。