我有一个班级
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&lt; Tree&lt;?&gt;&gt;中还是在genericType?换句话说:我怎样才能确定Tree类所携带的对象类型?
答案 0 :(得分:1)
您要查找的信息将存储在genericType
参数中。 genericType
的实际类型取决于您尝试(联合国)将JSON编入的Tree<T>
层次结构的复杂性。请注意,genericType
是从资源方法签名派生的(对于读者)。例如,对于以下方法:
@GET
public String get(final Tree<String> tree) { ... }
genericType
将包含预期的泛型类型信息。但是对于像这样的方法:
@GET
public String get(final Tree tree) { ... }
Tree
的参数类型为Object
。
注意:您可以使用Jersey中可用的JSON模块而不是(un)将Java对象编组为JSON,并尝试使用JSON&lt; - &gt; Object的JAXB方法(在这里您可以使用@XmlTransient
注释从(联合国)编组中省略parent
。在Jersey 2.3+中,还有一个entity-filtering的概念,它允许您选择哪些字段应被视为(未)编组到JSON中/从JSON编组。