【发布时间】:2017-01-16 07:15:09
【问题描述】:
我正在使用 RESTEasy 客户端从 API 检索 JSON 字符串。 JSON 有效负载如下所示:
{
"foo1" : "",
"foo2" : "",
"_bar" : {
"items" : [
{ "id" : 1 , "name" : "foo", "foo" : "bar" },
{ "id" : 2 , "name" : "foo", "foo" : "bar" },
{ "id" : 3 , "name" : "foo", "foo" : "bar" },
{ "id" : 4 , "name" : "foo", "foo" : "bar" }
]
}
}
现在我只想提取items 节点用于对象映射。拦截 JSON 响应正文并将其修改为将 items 作为根节点的最佳方法是什么?
我将RESTEasy proxy framework 用于我的 API 方法。
REST 客户端代码:
ResteasyWebTarget target = client.target("https://"+server);
target.request(MediaType.APPLICATION_JSON);
client.register(new ClientAuthHeaderRequestFilter(getAccessToken()));
MyProxyAPI api = target.proxy(MyProxyAPI.class);
MyDevice[] result = api.getMyDevice();
RESTEasy 代理接口:
public interface MyProxyAPI {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/device")
public MyDevice[] getMyDevices();
...
}
【问题讨论】:
-
转换为 Javascript 对象并将其作为 Object 检索。
-
items是根重要还是您不想映射消息的任何其他元素?快速浏览 RestEasy 文档,您正在通过 JAXB 提供程序对 Java bean 使用自动编组/解组? -
@dbreaux 是的,我只是不想映射任何其他元素。有关简化的实现代码,请参阅我对 OP 的编辑。我当然可以注册一个提供者来更改消息正文,但我想知道这样的提供者的实现会是什么样子。
-
当映射自动完成时,为什么要增加预处理响应的复杂性而不是事后简单地提取对象?
-
我认为,我需要在 java 中对完整的 Json 结构进行建模,我认为这很混乱。实际上,我的“项目”节点周围还有更多的对象。
标签: java jakarta-ee jax-rs resteasy jackson2