json - Spring Roo OneToMany 关系未在 JSON 中显示

标签 json hibernate spring-mvc jackson spring-roo

我正在尝试使用 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) 时我看不到它们 这是我的代码:

Parent.java:

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

private String name;

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

Child.java

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

private String name;

@ManyToOne
private Parent parent;
 }

袋鼠贝壳:

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。我可以看到 child 有一个 parent p, parent 有 child 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
 }

如何让我的 child 在 JSON GET 请求中显示在家长下方?

最佳答案

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

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

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

关于json - Spring Roo OneToMany 关系未在 JSON 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16197866/

相关文章:

ios - 快速解析 UICollectionViewCell 中的 json

java - 逆向工程升级到 Hibernate 3.6 错误

java - 如何使用JPA查询方法从表中选择两列的所有数据

java - 如何在 Spring Hibernate 运行时设置数据库名称

java - Spring MVC 绝对URL问题

java - 如何等待@Scheduled 直到上一个任务未完成?

javascript - 使用 D 3's pie chart to demonstrate JSON' s 每个集合

java - 如何从 JSON 字符串创建 JAVA 对象?

java - GSON/JSON 单例反序列化

java - 在服务器上运行但在 devbox 上不运行的 spring mvc 应用程序出现 404 错误