복붙노트

[SPRING] 스프링 mvc에서 컨트롤러에서 아약스로 객체를 반환하는 법

SPRING

스프링 mvc에서 컨트롤러에서 아약스로 객체를 반환하는 법

컨트롤러에서 jQuery ajax로 직원 목록을 반환해야합니다. 그것을 위해 어떻게해야합니까?

//controller part 
@RequestMapping("phcheck")
public ModelAndView pay(@RequestParam("empid") int empid, String fdate, String tdate) {

   ModelAndView mav = new ModelAndView("phcheck");
   List<Employee> 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")
    }
});

});

미리 감사드립니다.

해결법

  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-object-from-controller-to-ajax-in-spring-mvc by cc-by-sa and MIT license