泽西+杰克逊+ JAXB + @OneToMany关系

时间:2014-10-07 19:25:11

标签: json jaxb jackson one-to-many jersey-2.0

支持者,

我使用JERSEY作为JAX-RS WS,使用Jackson获取JSON并使用JAXB注释到XML。弹簧用于自动装配和冬眠作为orm。

春天是4.0.5 hibernate 4.2.13FINAL

我使用@xmlrootelement注释获取了我的实体,注册了jacksonfeature,@ jsonManagedReference和@JsonBackReference以避免所有@onetomany和@manytoone中的无限递归..这只适用于检索无关系实体。

例如,用户实体非常简单,只有登录,密码...我可以在ajax调用中检索xml和json的用户列表

这是我对球衣依赖的pom:

    <!-- Jersey RESTful -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.11</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.11</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>            
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </exclusion>
    </exclusions>          
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.4.1</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.11</version>
</dependency>


<!-- Jersey RESTful -->

我的资源方法:

    @GET
    @Path("processo/{processo}")
    @Produces({ MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public Processo infoProcesso(@PathParam("processo") String processo){
        return processoService.getProcesso(processo);
    }
来自Processo实体的

代码片段:

@Entity
@XmlRootElement(name = "processo")
public class Processo {

  @Id
  @GeneratedValue
  private Long id;
  .
  .
  .
  @OneToMany(mappedBy="processo")
  @JsonManagedReference
  private List<Prioridade> prioridades = new ArrayList<Prioridade>();
}
来自Prioridade实体的

代码片段:

@Entity
@XmlRootElement(name = "prioridade")
public class Prioridade {

   @Id
   @GeneratedValue
   private Long id;

   @ManyToOne
   @JsonBackReference
   private Processo processo;
}

当检索@onetomany关系实体时,我可以在tomcat控制台中看到SQL语句,但如果我在返回之前尝试使用println,它就不会显示(可能是某些配置问题,仍然没有设置log4j或其他)

说,当我从本地网络服务器(miniweb)运行这个ajax调用时:

$.ajax({
type: "GET",    
url:"https://localhost:8443/pushrpi/processo/816101680",
dataType:"xml",
crossDomain: true,
headers: {
 "Authorization": "Basic ZGVwb3NlY2xpZW50OmRlcG9zZWNsaWVudA=="
}
}).done(function(data){alert('1');});

我获得了OPTIONS响应,但是使用chrome的开发工具GET总是被取消(

)。

您需要的任何其他信息?我没有得到错误,警告..没有回到tomcat控制台,最后&#34; log&#34;是SQL语句。

任何提示?

提前谢谢。 / fferrandini

0 个答案:

没有答案