如何在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文件中