将Entity对象转换为JSON
我需要将实体对象转换为json。 我放
到servlet配置文件,所以Spring可以自动将对象转换为json格式。 但是spring不会这样做。 我还添加了jacksonjar项目。
控制器方法
@RequestMapping(value = "/addData.html", method = RequestMethod.POST) public @ResponseBody GroupStudent addNewGroup(@RequestBody GroupStudent group) { return group; }
GroupStudent
@Entity @Table(name = "GroupStudent") @NamedQueries({ @NamedQuery(name = "GroupStudent.getAllGroups", // get all groups query = "select g from GroupStudent g"), @NamedQuery(name = "GroupStudent.getGroupByName", // get group by name query = "select g from GroupStudent g where g.groupStudentNumber = :name") }) public class GroupStudent implements Serializable { public GroupStudent() {} public GroupStudent(String groupStudentNumber) { this.groupStudentNumber = groupStudentNumber; } // create connectivity with table Student private Set students = new HashSet(); @OneToMany(mappedBy = "groupStudent", cascade = CascadeType.ALL, orphanRemoval = true) public Set getStudents() { return this.students; } public void setStudents(Set students) { this.students = students; } @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "group_id_seq") @SequenceGenerator(name = "group_id_seq", sequenceName = "GroupStudent_seq", allocationSize = 1) @Column(name = "GroupStudentId") public Long getGroupStudentId() { return this.groupStudentId; } public void setGroupStudentId(Long groupStudentId) { this.groupStudentId = groupStudentId; } @Column(name = "GroupStudentNumber") public String getGroupStudentNumber() { return this.groupStudentNumber; } public void setGroupStudentNumber(String groupStudentNumber) { this.groupStudentNumber = groupStudentNumber; } // table GroupStudent fields private Long groupStudentId; private String groupStudentNumber;
}
在浏览器中我发现我有406错误和错误窗口错误[object Object]。
如果有人知道问题是什么,我会很乐意寻求帮助。
谢谢。
@RequestMapping(produces="application/json")
是你需要的,并且不要忘记在你的JS代码(而不是GET)中发出POST请求。
如果您的对象加入了其他表,那么您只能通过以下方式执行此操作。
首先,让我们注释与@JsonManagedReference,@ JsonBackReference的关系,让Jackson更好地处理这种关系:
这是“用户”实体:
public class User { public int id; public String name; @JsonBackReference public List- userItems; }
而“项目”:
public class Item { public int id; public String itemName; @JsonManagedReference public User owner; }
我们现在测试新的实体:
@Test public void givenBidirectionRelation_whenUsingJacksonReferenceAnnotation_thenCorrect() throws JsonProcessingException { User user = new User(1, "John"); Item item = new Item(2, "book", user); user.addItem(item); String result = new ObjectMapper().writeValueAsString(item); assertThat(result, containsString("book")); assertThat(result, containsString("John")); assertThat(result, not(containsString("userItems"))); }
这是序列化的输出:
{ "id":2, "itemName":"book", "owner": { "id":1, "name":"John" } }
注意:
@JsonManagedReference是引用的前向部分 – 正常序列化的部分。 @JsonBackReference是引用的后半部分 – 它将从序列化中省略。
引自下面的链接。 您可以访问更多。
jackson – 双向关系