복붙노트

[SPRING] AJAX 요청에 대한 응답으로 Spring MVC 컨트롤러에서 객체를 반환하는 방법은 무엇입니까?

SPRING

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 코드 :

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

미리 감사드립니다.

해결법

  1. ==============================

    1.봄에는 객체 직렬화, 비 ​​직렬화 및 메시지 변환이 필요합니다. 이 경우 @RequestBody 및 @ResponseBody를 사용하여 컨트롤러 처리기 메서드에 주석을 추가해야합니다.

    봄에는 객체 직렬화, 비 ​​직렬화 및 메시지 변환이 필요합니다. 이 경우 @RequestBody 및 @ResponseBody를 사용하여 컨트롤러 처리기 메서드에 주석을 추가해야합니다.

    어디에:

    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'은 필요하지 않습니다. 기본값은 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
             });    
            },
    

    참고 : JSON 직렬화 및 비 직렬화 작업을 수행하려면 Jackson mapper 또는 다른 매퍼가 빌드 경로에서 사용할 수 있어야합니다.

    참조 :

  2. ==============================

    2.

    @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를 등록해야한다.

  3. ==============================

    3.ModelAndView는보기를 렌더링 할 계획임을 암시합니다. 객체를 반환하려면 @ResponseBody 주석을 사용하십시오.

    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'"로 메소드를 호출하면 전체 직원 목록을 리턴합니다.

  4. ==============================

    4.컨트롤러에서 @ResponseBody Type으로 메소드를 만들고 ajax에서 List from success 함수를 사용하십시오.

    컨트롤러에서 @ResponseBody Type으로 메소드를 만들고 ajax에서 List from success 함수를 사용하십시오.

    Maven을 사용하는 경우 Jackson Mapper 파일을 Pom.xml 파일에 저장합니다.

  5. from https://stackoverflow.com/questions/23267113/how-to-return-an-object-from-a-spring-mvc-controller-in-response-to-ajax-request by cc-by-sa and MIT license