【发布时间】:2016-10-02 06:05:10
【问题描述】:
我正在使用 Jersey 开发的 RESTful API 使用并生成 JSON,并且我知道 Jersey 使用 Jackson 将 JSON 自动绑定到 Java 类存在依赖关系。我对依赖关系有点困惑,但使用 jersey-media-json-jackson 似乎包含此功能。
我读到这个自动绑定是针对 POJO 的,而我的类比简单的 POJO 复杂得多。因此,对于 POJO,绑定需要一个默认构造函数、所有 setter(如果您想解组)和所有 getter(如果您在编组之后)。但是,我的课不是这样的。它们有限制,没有默认构造函数,只有几个特定的构造函数,也没有我想要编组和/或解组的每个成员的 setter 和 getter。
这种情况有解决方法吗?还是我应该忘记使用数据绑定?也许自定义序列化程序可以挽救这种情况?
我只是想要这个,因为我认为拥有这个会更好:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public GroceryItem createGroceryItem(GroceryItem item) {
// process the item... do whatever
return item;
}
比拥有原始版本:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String createGroceryItem(String jsonData) throws JsonProcessingException {
return new ObjectMapper().writeValueAsString(jsonData);
}
或者也许我只是以错误的方式看待这种情况。既然如此,请赐教。
【问题讨论】:
-
非原始版本如何知道POJO?是否有一些预处理步骤可以将 JSON 转换为对象?换句话说,有一个原始版本,你只是不想维护它
-
第一个问题:没有POJO。第二个问题:我想弄清楚我是否应该这样做或做什么。第三句话:我不确定我是否理解。
-
GroceryItem不是 POJO?对于第三句话,你说你想要从 String Request 到 GroceryItem 请求的一些自动转换,也就是说你不想“维护”,或者自己编写 JSON 转换步骤,让 Jersey+Jackson 来做? -
不,它不是 POJO。实际上没有
GroceryItem类,我只是以它为例。这些类实际上是Tournament、Schedule和类似的。 -
并回答第二部分。好吧,如果我能避免自己写,让图书馆来做,我会更开心。但由于我不处理 POJO,看来我必须编写自己的自定义序列化器和反序列化器。但与此同时,我不想在我的服务中处理原始数据 (
String)。我希望这些方法能够接收和返回Touranament和这样的类,而不仅仅是字符串。
标签: java json rest jersey jackson