【发布时间】:2015-06-05 18:36:51
【问题描述】:
我发现的所有关于 JSON 的网络文章似乎都与数据规范有关;我正在寻找有关清晰实施方式的提示。
我有一个从 Hibernate 获得的持久对象和一个应该返回它们列表的 Web 服务。
生成的 JSON 应该包含与数据混合的 HATEOAS 链接。 JSON 库不应触发任何错误(解决任何代理),而是将它们转换为 href 属性。
所以,如果我有 2 个 Customer 实例和一个名为 /customers 的 Web 服务,我应该得到如下所示的 JSON:
{
"href" : "/customers",
"data" : [ { "id" : 234,
"name" : "Bill Shatner",
"href" : "/customers/234",
"orders" : "/customers/234/orders",
"orders-count" : 2
},
{
"id" : 210,
"name" : "Malcolm Reynolds",
"href" : "/customers/210",
"orders" : "",
"orders-count" : 0
} ]
}
(注意:只是一个插图,没有按照 HAL 等任何规范进行编码)
我觉得我必须在服务中手动滚动所有这些东西,这感觉就像缺乏经验。肯定有一个代理感知的网络框架可以让我创建一个 JSON 模板并将它传递给我的域对象并期望得到正确的结果?
@Path("/customers")
public HttpResponse getAllCustomers(HttpRequest req)
{
@Autowired CustomerRepository custRepo;
List<Customer> data = custRepo.findAll();
return ResponseBuilder.status(200).toJSON(data).build();
}
我知道这可能比可能的更神奇,但肯定有比为每个持久对象创建一个 HashMap、将每个 getter 硬编码到一个 put 并在一个大的 galumping 中添加硬编码的 href 字符串更好的东西环形?
【问题讨论】:
-
那么你是说你想以 JSON 格式返回
List<Customer> data吗?如果是,那么只需将 Spring 请求映射的返回类型设置为@ResponseBody List<Customer>。在类路径中包含 Jackson 库。您的列表将作为 JSON 响应返回,您可以找到更多详细信息 here -
@Amit.rk3,这是否添加了 self 和 lazy has-a 的 URL?它是否避免解析代理?
-
刚刚找到了更好的方法。将其发布在答案中。我认为这应该适合你
标签: java json spring hibernate