我有实体类GroupStudent,Spring Controller和带有Ajax函数的JSP页面。在控制器中,我尝试使用@ResponseBody将实体GroupStudent对象传递到JSP页面。但是我总是从浏览器中得到错误:Error [object Object]。我发现我需要在项目jackson-core-asl和jackson-mapper-asl jars中添加到lib文件夹。我添加了它们(版本1.9.7)并放入spring-servlet.xml,以便它可以自动将GroupStudent对象转换为json格式并将其传递回ajax函数。但这并没有帮助,我在浏览器中始终有相同的错误对话框。如果有人知道如何使用@ResponseBody将实体对象传递给Ajax,我将不胜感激。
谢谢。
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<Student> students = new HashSet<Student>();
@OneToMany(mappedBy = "groupStudent", cascade = CascadeType.ALL, orphanRemoval = true)
public Set<Student> getStudents() {
return this.students;
}
public void setStudents(Set<Student> 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;
}
控制者
@RequestMapping(value = "/addData.html", method = RequestMethod.POST)
public @ResponseBody GroupStudent addNewGroup(@RequestBody GroupStudent group) {
return group;
}
}
Ajax功能
function addGroupAjax() {
var groupStudentNumber = $('#groupStudentNumber').val();
$.ajax({
type: "POST",
url: "/IRSystem/addData.html",
contentType: "application/json; charset=utf-8",
dataType: "json",
mimeType: "application/json",
data: "{\"groupStudentNumber\":" + "\"" + groupStudentNumber + "\"}",
success: function(response) {
},
error: function(e) {
alert("Error" + e);
}
});
}
最佳答案
您可以尝试将produces="application/json"
添加到您的@RequestMapping
中,使其看起来像@RequestMapping(value = "/addData.html", method = RequestMethod.POST, produces="application/json")
。
另外,我最初没有看到它,您在POST方法上缺少@ResponseBody
批注。在此博文http://www.javacodegeeks.com/2013/07/spring-mvc-requestbody-and-responsebody-demystified.html中,您可以看到它的作用。简短的回答:它可以帮助您进行序列化/反序列化,并将序列化的对象直接写入响应流,因此您不必手动进行。
另外,检查登录服务器上是否有错误(如果没有)(如果您使用的是Chrome),请打开“设置”->“工具”->“开发人员工具”->“网络”,然后再次触发您的呼叫。从显示您的呼叫的列表中选择元素,在那里您可以确切地看到哪个服务器返回了您。
关于java - Spring MVC @ResponseBody错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19914773/