我正在玩Play! 2.1.4使用Ebean / MySQL的框架。
系统基本上跟踪课程及其要求。例如,如果您想参加高级艺术,您必须首先参加常规艺术。据我所知,这是一个ManyToMany关系,但我可能是错的。
这是我的模特: @实体 公共课程{
public static Model.Finder<Long,Course> find = new Model.Finder<Long,Course>(Long.class, Course.class);
@Id
private Long id;
private String name;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable( name = "course_course",
joinColumns = @JoinColumn(name = "course_id1"),
inverseJoinColumns = @JoinColumn(name = "course_id2"))
private Set<Course> courseRequirements = new HashSet<Course>();
private String availability;
private Long category;
@Lob
private String description;
@Lob
private String otherRequirements;
private Long bucketId;
// Getters and setters ...
以下是我如何将JSON返回到我的前端:
List<Course> courses = Ebean.find(Course.class).fetch("courseRequirements").findList();
JsonContext jsonContext = Ebean.createJsonContext();
return ok(jsonContext.toJsonString(courses));
但是,在JSON的“courseRequirements”键中,它会打开一个包含完整课程对象的新数组。我只想获得它需要的课程ID数组,例如: 课程要求:[3,5] 意味着:本课程要求您先修读ID 3和5的课程。
我改写了我的吸气剂: public Set getCourseRequirements(){ 设置requiredCourseIds = new HashSet();
for(Course course : courseRequirements)
{
requiredCourseIds.add(course.getId());
}
return requiredCourseIds;
}
因为我认为Ebean会在尝试填写JSON密钥时将其拉出来,但事实并非如此。
如何更改它以便它只返回courseRequirements键的课程ID数组,而不是完整对象?
谢谢!
答案 0 :(得分:1)
而不是 toJsonString(Object o),您应该使用 toJsonString(Object o,boolean pretty,JsonWriteOptions options)。
使用JsonWriteOptions“您可以显式声明要在根级别和每个路径的JSON输出中包含哪些属性。”
http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/text/json/JsonWriteOptions.html