gpt4 book ai didi

java - 通用类的 MessageBodyReader/Writer

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:30 27 4
gpt4 key购买 nike

我有课

public class Tree<T> {
private T value;
private Tree<T> parent;
private List<Tree<T>> children;
...
}

然后我想让 MessageBodyReader 和 Writer 能够生成和使用表示此类实例的 JSON,但没有循环引用。因此 JSON 文档将排除父文档。

然后我得到一个我将实现的方法,如下所示

@Override
public Tree<?> readFrom(Class<Tree<?>> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
throws IOException, WebApplicationException {

我如何确定什么?是在 Class > 中还是在 genericType 中?或者换句话说:如何判断Tree类携带的是什么类型的对象?

最佳答案

您要查找的信息将存储在genericType中范围。 genericType的实际类型取决于 Tree<T> 的复杂性您尝试将 JSON 编码(解编)到的层次结构。请注意 genericType (对于读者而言)是从资源方法签名派生的。例如,对于如下方法:

@GET
public String get(final Tree<String> tree) { ... }

genericType将包含预期的通用类型信息。但对于像这样的方法:

@GET
public String get(final Tree tree) { ... }

Tree的参数类型将是Object .

注意:您可以使用 Jersey 中提供的 JSON 模块,并尝试 JSON<->Object 的 JAXB 方法,而不是自行将 Java 对象(取消)编码为 JSON(此处您可以使用 @XmlTransient 注释来省略(取消)编码中的 parent)。 Jersey 2.3+中还有一个entity-filtering的概念它允许您选择哪些字段应被视为编码到 JSON 或从 JSON 编码。

关于java - 通用类的 MessageBodyReader/Writer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779512/

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