【问题标题】:Spring Roo OneToMany relationship not showing in JSONSpring Roo OneToMany 关系未在 JSON 中显示
【发布时间】:2013-04-24 16:56:45
【问题描述】:

我正在尝试使用 Hibernate、roo 和 JSON 获得 OneToMany 关系。

我可以通过添加 jspx 页面看到父级的子级

 <field:display field="children" id="s_com_example_domain_Parent_children" object="${parent}" z="Etv5+hIcaVaq9A6jzjMOK0xoJMI="/>

到/src/main/webapp/WEB-INF/parents/show.jspx

但是,当我执行 GET (type=application/json) 时,我看不到它们 这是我的代码:

父.java:

 @RooJavaBean
 @RooToString
 @RooJpaActiveRecord
 @RooJson
 public class Parent {

private String name;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "parent")
private Set<Child> children = new HashSet<Child>();
 }

子.java

 @RooJavaBean
 @RooToString
 @RooJpaActiveRecord
 @RooJson
 public class Child {

private String name;

@ManyToOne
private Parent parent;
 }

Roo 贝壳:

jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
entity jpa --class ~.domain.Parent 
entity jpa --class ~.domain.Child
field set --fieldName children --type ~.domain.Child --class ~.domain.Parent --mappedBy     parent --cardinality ONE_TO_MANY --notNull false 
field reference --fieldName parent --type ~.domain.Parent --cardinality MANY_TO_ONE --class ~.domain.Child --notNull false
web mvc setup
web mvc all --package ~.web
web mvc json all 

我也加了

     <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.12</version>
    </dependency>

到我的 Maven 项目。

如果我通过 web (jspx) 界面,我可以添加一个父 p,和子 c。我可以看到孩子有一个父母p,父母有孩子c,但这是我对JSON的GET请求的输出

 Request Url: http://localhost:8080/HibernateTest/children/1
 Request Method: GET
 {
     "id": 1,
     "name": "c",
     "parent": {
         "id": 1,
         "name": "p",
         "version": 0
     },
     "version": 0
 }

 Request Url: http://localhost:8080/HibernateTest/parents/1
 Request Method: GET
 {
     "id": 1,
     "name": "p",
     "version": 0
 }

如何让我的孩子在 JSON GET 请求中显示在父级下方?

【问题讨论】:

    标签: json hibernate spring-mvc jackson spring-roo


    【解决方案1】:

    为了返回级联关系,您需要覆盖实体的 toJson() 方法(从您的 .aj 中推入),在您的父级中执行以下操作:

    public String toJson() {
      return new JSONSerializer().include("*.children").serialize(this);
    }
    

    更多信息可以在here找到。我认为您还可以使用一个注释,例如@Json 或类似的东西,您可以在其中指示在序列化时包含/排除哪些成员,但我不记得它,也无法通过 Google 找到它。

    【讨论】:

      【解决方案2】:

      在 RooJson 注释上使用 deepSerialize 可以更深入地了解 Flexjson,而不必弄乱方面:

      @RooJavaBean
      @RooJpaActiveRecord
      @RooJson(deepSerialize = true)
      public class Office {
      
          @NotNull
          private String name;
      
          @OneToMany(targetEntity = Person.class, cascade = CascadeType.ALL, mappedBy = "office")
          private Set<Person> people = new HashSet<Person>();
      
          @NotNull
          @ManyToOne(targetEntity = Company.class)
          private Company company;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-25
        • 1970-01-01
        • 2011-03-12
        • 2019-07-08
        • 1970-01-01
        相关资源
        最近更新 更多