gpt4 book ai didi

jackson - 如何在发送前包装 Jersey + jackson json响应

转载 作者:行者123 更新时间:2023-12-03 22:10:37 28 4
gpt4 key购买 nike

我在 Tomcat 休息应用程序中运行 Jersey 2.5.1 & Jackson。对于我最初将 POJO 简单地转换为 JSON 的用例,基本设置效果很好。集合很好地转换为 json 数组,如下所示:

[{//one item},{//second item},{}... and so on]

现在,我需要检查我发回我的 rest api 的结果,并且
1) 如果它是一个列表或一个集合,则将其转换为类似的东西:

{result:[//my original list of result objects]}


2)如果是一个简单的POJO,那么就把它改造成这样:

{result:[{//the one result object}]}

我觉得这应该很容易做到,但是,我没有找到任何说明如何做到这一点的内容。有谁知道如何做到这一点?我已经尝试注册一个 Provider,它又注册一个对象映射器和其他方法 - 没有一个看起来容易或简单......这些选项看起来代码太多,无法将我的对象包裹起来。

谢谢!

最佳答案

创建一个Result类:

public class Result {

private List<YourItem> result;

// getters/setters
}

创建一个 WriterInterceptor将您的实体包装到 Result 中并让 Jackson 编码结果对象:

@Provider
public class WrappingWriterInterceptor implements WriterInterceptor {

@Override
public void aroundWriteTo(final WriterInterceptorContext context)
throws IOException, WebApplicationException {

final Result result = new Result();
final Object entity = context.getEntity();

if (entity instanceof YourItem) {
// One item.
result.setResult(Collections.singletonList((YourItem) entity));
} else {
result.setResult((List<YourItem>) entity);
}

// Tell JAX-RS about new entity.
context.setEntity(result);

// Tell JAX-RS the type of new entity.
context.setType(Result.class);
context.setGenericType(Result.class);

// Pass the control to JAX-RS.
context.proceed();
}
}

关于jackson - 如何在发送前包装 Jersey + jackson json响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21291803/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com