当前位置: 首页 > 面试题库 >

如何从Spring MVC控制器返回对象以响应AJAX请求?

冯通
2023-03-14
问题内容

我必须从控制器返回员工列表以响应jQuery AJAX请求。我应该怎么做?

我的控制器:

@RequestMapping("phcheck")
public ModelAndView pay(@RequestParam("empid") int empid, String fdate, String tdate) {
    ModelAndView mav = new ModelAndView("phcheck");
    List<Employee> employees = entityManager.createQuery(
        "SELECT e FROM Employee e WHERE e.empId = " + empid, Employee.class)
        .getResultList();
    mav.addObject("employees", employees); // I need this list of employee in AJAX

    return mav;
}

相关视图中的AJAX代码:

$(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");
        }
    });
});

提前致谢。


问题答案:

I need this list of employee in ajax

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

哪里:

  • @ResponseBody:将通知spring尝试转换其返回值并将其自动写入http响应。
  • @RequestBody:将通知spring尝试将即将到来的请求主体的内容即时转换为你的参数对象。
    在你的情况下,你需要JSON类型,则必须将其添加@ResponseBody到方法签名中或方法的正上方,并产生和使用可选的,例如:
@RequestMapping(value="phcheck", method=RequestMethod.GET
                produces="application/json")
public @ResponseBody List<Employee> 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'足够。

并且你可以收到AJAX成功案例中的员工列表,以对其进行迭代:

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

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



 类似资料:
  • 但是,当我返回列表时,就像这段代码: 对于完全相同的API的列表返回类型的响应是正确的响应: [{“SellingPrice”:23000,“ID”:1,“Version”:1,“CreatedOn”:“25Feb 2019,05:53”,“LastUpdatedOn”:“25Feb 2019,05:53”}]

  • 问题内容: 我正在做一个MVC应用程序,我需要从控制器传递json对象才能查看。 上面的代码是我在控制器中使用的,现在当我部署视图页面时,在浏览器中打开一个下载对话框,打开文件时,它会为我提供json对象作为我需要的格式。 现在我想返回我的视图页面,也想访问视图页面中的json对象。我怎样才能做到这一点。 问题答案: 在执行此操作时,您明确地告诉MVC 不要使用view 并提供序列化的JSON数据

  • 问题内容: 我使用jquery发出ajax请求,这将调用以下spring控制器: 但是我收到以下错误: 如果需要,这里是我使用jQuery进行的ajax调用: 编辑 如果使用以下命令,则会出现相同的错误: 问题答案: 对于在家的观众…我发现问题是由于控制器中定义的方法签名与ajax调用不匹配。我从控制器方法中删除了参数。然后,我还意识到我还必须返回新的模型和视图。这是工作代码: 我更改为ajax调

  • 因此,在这种情况下,我想配置Spring/Jackson返回{}(2字节)。 我已经考虑过在调用中返回new Object(),否则将返回void,但IMO这是一个肮脏的sout,必须有更好的东西。

  • 我正在使用Spring形式。我只需要得到Staemap作为响应,但我得到的是整个jsp页面作为响应。

  • 问题内容: 我有一个函数,用关键字声明一个变量。然后,它将启动AJAX请求以设置变量的值,然后从函数中返回此变量。 但是,我的实现失败了,我也不知道为什么。 这是代码的简化版本; 问题答案: AJAX请求是异步的。您的sendRuest函数正在执行,正在发出AJAX请求,但它是异步发生的;因此,sendRuest的其余部分在AJAX请求(和onreadystatechange处理程序)执行之前就已