使用Jersey将JSON绑定到复杂的Java类

时间:2016-06-02 13:13:06

标签: java json rest jersey jackson

我正在使用Jersey开发的RESTful API消耗并生成JSON,我知道Jersey有一个依赖,其中Jersey使用Jackson自动将JSON绑定到Java类。我对依赖关系有点困惑,但使用@POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public GroceryItem createGroceryItem(GroceryItem item) { // process the item... do whatever return item; } 似乎包含了这个功能。

我读到这个自动绑定被认为是POJO,而我的类比简单的POJO复杂得多。因此对于POJO,绑定需要一个默认构造函数,所有setter(如果你想解组)和所有getter(如果你在编组之后)。但是,我的班级不是这样的。他们有限制,没有默认的构造函数,但有几个特定的​​构造函数,也没有为我想要编组和/或解组的每个成员的setter和getter。

这种情况有解决方法吗?或者我应该忘记使用数据绑定?也许自定义序列化程序可以挽救这种情况?

我只是想要这个,因为我觉得这样做要好得多:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String createGroceryItem(String jsonData) throws JsonProcessingException {
    return new ObjectMapper().writeValueAsString(jsonData);
}

而不是原始版本:

input[type=date] {
  text-align: right;
}

input[type="date"]:before {
  color: lightgrey;
  content: attr(placeholder) !important;
  margin-right: 0.5em;
}

或许我只是看错了这种情况。在那种情况下,请赐教。

1 个答案:

答案 0 :(得分:0)

没有默认构造函数意味着你不能轻易使用杰克逊解组。 没有吸气剂意味着你不能轻易使用杰克逊来组织。

您有几种选择:

  1. 编写您自己的JSON转换代码。
  2. 更改您的类以生成随后用于JSON转换的POJO类。基本上,为每个类添加两个方法:createJsonData()和importFromJsonData()使用Jackson编组和解组。
  3. 修改 toPOJO和fromPOJO可能是很好的方法名称。或者,toJSON和fromJSON并使用内部静态POJO类进行Jackson序列化。