泽西岛未能为GET响应配置对象

时间:2012-09-01 16:49:29

标签: rest jaxb jersey

我正在编写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标签可能有问题吗?

感谢

1 个答案:

答案 0 :(得分:0)

这是由我使用Hibernate的方式引起的。我从数据库加载Object并将其返回到我的Rest资源,当我进行空检查时,资源仍然可用。

当JAXB尝试编组此对象时,它失败,对象已更改且不再可用,或者在hibernate创建它时没有正确的注释。

我通过创建一个新的Object并用一个hibernate返回的数据加载它来解决这个问题。