我有这个问题试图从rest webservice(cxf)解组json。 我正在使用JAXB和EclipseLink。
实体映射如下:
@Entity
@Table(name = "service_pkg_service", schema = "MD")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ServicePkgService extends DatabaseModel implements java.io.Serializable {
@Transient
@XmlIDREF
private Set<ChannelPkgService> channelPkgServices = new HashSet<ChannelPkgService>();
}
@Entity
@Table(name = "channel_pkg_service", schema = "MD")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class ChannelPkgService extends DatabaseModel implements java.io.Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CHANNEL_PKG_ID")
@XmlID
@XmlAttribute
private String id;
}
我有一个扩展IDResolver的类,所以我可以根据它的ID生成一个实体。
public class EntityIDResolver extends IDResolver{
@Override
public void bind(String id, Object obj) throws SAXException {
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public Callable<?> resolve(final String id, Class targetType) throws SAXException {
}
}
我有问题解组json像这个“channelPkgService”:[1,2,3],targetType的类是java.lang.Object
我读了这个https://github.com/javaee/jaxb-v2/issues/546,并创建了一个包装来处理这个问题。
public class ChannelPkgServiceWrapper extends HashSet<ChannelPkgService>{
}
Sinse我有很多这些案例,我不想创建很多包装器,是否有更通用的方法来处理它?</ p>
忘记使用过的版本:
答案 0 :(得分:1)
@XmlIDREF
来映射文档内引用。 ID引用的每个对象也必须嵌套在XML或JSON文档中的某个位置:
如果您希望将对象作为其ID进行编组,那么您将需要使用XmlAdapter
。看看我对类似问题的回答:
另请注意,JAXB是一个规范(JSR-222),而EclipseLink包含MOXy实现(我是MOXy技术主管)。这意味着您可以从依赖项中删除jaxb-impl-2.1.13.jar: