Jersey DTO的父/子模型
我不确定这种情况是否与泛型相关,而不是与DTO相关,但它是这样的: 我有一个DTO,它代表一个人。一个人可以有其他人(s)作为孩子,或者只是资源链接到那些人(s)。这意味着子对象可以是两种类型之一:Person(DTO)或ResourceLink。它将是什么类型,是通过queryParam确定的,因此逻辑上是通过下面的流确定的。我只想用一个集合对象来表示它们,但不知道最好的方法 以下是我到目前为止的情况:Jersey DTO的父/子模型,jersey,parent-child,dto,Jersey,Parent Child,Dto,我不确定这种情况是否与泛型相关,而不是与DTO相关,但它是这样的: 我有一个DTO,它代表一个人。一个人可以有其他人(s)作为孩子,或者只是资源链接到那些人(s)。这意味着子对象可以是两种类型之一:Person(DTO)或ResourceLink。它将是什么类型,是通过queryParam确定的,因此逻辑上是通过下面的流确定的。我只想用一个集合对象来表示它们,但不知道最好的方法 以下是我到目前为止的情况: public class PersonDTO<T> { @XmlEl
public class PersonDTO<T> {
@XmlElementWrapper(name = "children")
@XmlElement(name = "child")
List<T> children;
// other stuff
}
public class PersonDTO{
@XmlElementWrapper(name=“children”)
@xmlement(name=“child”)
列出儿童名单;
//其他东西
}
使用这种方法,我需要根据if…else
条件定义翻译的类型
早些时候,我有两个不同的集合,其中一个保持NULL。我还想用一个新的DTO作为ChildrenDTO(不确定这是不是一个好主意)来提取关系
我想知道是否有针对这种情况的最佳实践,否则,是否可以根据条件声明PersonDTO
或PersonDTO
提前谢谢 我建议使用第三种类型作为列表子元素:
public interface PersonResolver () {
Person resolvePerson ();
}
public class Person implements PersonResolver {
Person resolvePerson () { return this; }
}
public class ResourceLink implements PersonResolver {
Person resolvePerson () {
if (myLinkTargetType == TARGET_TYPE_PERSON)
{ return (Person) myTarget; }
return null;
}
}
请原谅我迟了答复。谢谢你的回复。这不会把两个不相关的类型放在同一个继承树中吗?不过,如果一个方法是返回一个人,那么它现在将返回一个PersonResolver,对吗?因此,为了正确使用,它必须被转换回所需的类型,对吗?这里的想法是,只存储PersonResolver类型。然后可以将一个人解析为自己(
Person A;A.resolvePerson()==A
),而您的ResourceLink类型将解析为它所链接的人(ResourceLink b;b.resolvePerson()==(Person)b.GetTargetToFlink()
)这允许通过允许所有子级正交地生成个人
,而不是if(x instanceof Person)
等,来使用类似List
的容器。至于“继承树”,它只是一个接口——它使类型相互关联;与将两个不相关的类型放入一个容器相比,Person
必须有一个PersonResolver,它可以引用Person
或ResourceLink
,我们不关心它是什么,因为它将在运行时得到处理。我对这里的IsA不满意,因为我在寻找更多的HasA类型。但我感谢你花时间回答我的问题。我会将它标记为已接受,因为不幸的是,我自己想到了一个没有解析器的接口;但不想关联无关的对象。谢谢