我正在编写REST资源,而我遇到了一个对象
@Entity
@Table(name = "TABLE_A")
@XmlRootElement(name = "typeA")
public class TypeA implements GenericType{
@Id
@Column(name = "COLUMN_ID")
@GeneratedValue
private Integer id;
@OneToMany (mappedBy="person")
private List<TypeB> typeBList;
@XmlAttribute
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@XmlElement(name="mytypes")
public List<TypeB> getTypeBList() {
return typeBList;
}
public void setTypeBList(List<TypeB> typeBList) {
this.typeBList = typeBList;
}
}
界面没有任何注释。
这是提供服务的资源
@Path("user/{id}")
public class PersonResourceImpl {
@GET
@Produces({MediaType.APPLICATION_XML})
public TypeA getPerson(@PathParam("id") String id) {
LOG.info("doGetPerson() - IN");
... get from a datasource ...
return retrievedPerson;
}
当我尝试使用此资源时,从数据库返回正确的对象,但是当它尝试将其编组为xml时,它将失败,并且找不到类的Message body writer和MIME类型application / xml
这就是我必须为其他对象做的所有事情而且它们都有效,我唯一没有做过的就是@XmlAttribute标签可能有问题吗?
感谢
答案 0 :(得分:0)
这是由我使用Hibernate的方式引起的。我从数据库加载Object并将其返回到我的Rest资源,当我进行空检查时,资源仍然可用。
当JAXB尝试编组此对象时,它失败,对象已更改且不再可用,或者在hibernate创建它时没有正确的注释。
我通过创建一个新的Object并用一个hibernate返回的数据加载它来解决这个问题。