web-dev-qa-db-ja.com

AJAXリクエストに応じてSpring MVCコントローラーからオブジェクトを返す方法は?

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コードview

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


前もって感謝します。

9
Gorakh
@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を登録する必要があります here

1
geoand

ModelAndViewは、ビューをレンダリングする予定であることを意味しますが、そうではありません。オブジェクトを返すだけの場合は、@ ResponseBodyアノテーションを使用します。

@RequestMapping("phcheck")
public @ResponseBody List<Employee> 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'"でメソッドを呼び出した場合、従業員のリスト全体が返されます。

1
DavidA

コントローラで@ResponseBody Typeとしてメソッドを作成し、ajaxで成功関数からリストを取得します。

Mavenを使用している場合は、Jackson MapperファイルをPom.xmlファイルに入れます。

0
cse