如何在spring mvc中将对象从控制器返回到ajax

我必须将员工列表从Controller返回到jQuery ajax。 我该怎么做呢?

//controller part @RequestMapping("phcheck") public ModelAndView pay(@RequestParam("empid") int empid, String fdate, String tdate) { ModelAndView mav = new ModelAndView("phcheck"); List emp=entityManager.createQuery("select e from Employee e where e.empId="+empid, Employee.class).getResultList(); mav.addObject("emp", emp); <----I need this list of employee in ajax return mav; } 

视图中的Ajax

 //Ajax part $(document).ready(function () { $("#empid").change(function () { if ($("#fdate").val() != "" && $("#tdate").val() != "" && $("#empid").val() != "") { jQuery.ajax({ url: "phcheck.htm?empid=" + $("#empid").val() + "&&fdate=" + $("#fdate").val() + "&&tdate=" + $("#tdate").val(), success: function (data) { alert(data + "success"); }, error: function (data) { alert(data + "error"); } }); } else { alert("Please fill the from date and to date or select the employee id"); $("#empid .option").attr("selected", "selected") } }); 

});

提前致谢。

我需要ajax中的员工列表

在spring,您需要对象序列化,反序列化和消息转换。 在这种情况下,您需要使用@RequestBody@ResponseBody注释控制器处理程序方法。

哪里:

  • @ResponseBody :将告知spring尝试转换其返回值并自动将其写入http响应。
  • @RequestBody :将告知spring尝试将传入请求主体的内容动态转换为参数对象。

在您的情况下,您需要JSON类型,您必须将@ResponseBody添加到您的方法签名或方法上方,并生成和使用可选的,如:

 @RequestMapping(value="phcheck", method=RequestMethod.GET produces="application/json") public @ResponseBody List pay(@RequestParam("empid") int empid, String fdate, String tdate) { //get your employee list here return empList; } 

并在AJAX调用中使用:

  • contentType: 'application/json'属性告诉您要发送的数据类型。 和
  • dataType: json属性告诉jquery响应的内容类型。

在你的情况下contentType: 'application/json'不是必需的,默认的是'application/x-www-form-urlencoded; charset=UTF-8' 'application/x-www-form-urlencoded; charset=UTF-8'就足够了。

并且您可以在AJAX成功中收到员工列表,迭代它就像:

  success: function (data) { $.each(data, function(index, currEmp) { console.log(currEmp.name); //to print name of employee }); }, 

注意: Jackson mapper或任何其他映射器应该在buildpath上可用,以便进行JSON序列化和反序列化。

也可以看看:

  • spring mvc 3.1的新function
 @RequestMapping(value = "phcheck", produces = "application/json") @ResponseBody public ModelAndView pay(@RequestParam("empid") int empid, @RequestParam("fdate") String fdate, @RequestParam("tdate") String tdate) { return entityManager.createQuery("select e from Employee e where e.empId="+empid, Employee.class).getResultList(); } url:"phcheck.htm?empid="+$("#empid").val()+"&fdate="+$("#fdate").val()+"&tdate="+$("#tdate").val() 

在Spring MVC中,您必须注册MappingJackson2HttpMessageConverter,就像在这里完成一样

ModelAndView意味着您计划渲染视图,而不是。 要返回对象,请使用@ResponseBody注释:

 @RequestMapping("phcheck") public @ResponseBody List pay(@RequestParam("empid") int empid, String fdate, String tdate) { return entityManager.createQuery("select e from Employee e where e.empId="+empid, Employee.class).getResultList(); } 

此外,您应该更加小心处理查询。 您的查询是不安全的,并允许SQL注入。 例如,如果有人使用empId =“’15’或’1’=’1’”调用您的方法,那么它将返回整个员工列表。

将方法设置为控制器中的@ResponseBody类型,并在ajax中使用List from success函数。

如果使用Maven,将Jackson Mapper文件放在Pom.xml文件中