복붙노트

[SPRING] 아약스에 의해 스프링 컨트롤러로부터 어떻게 데이터를 얻을 수 있습니까?

SPRING

아약스에 의해 스프링 컨트롤러로부터 어떻게 데이터를 얻을 수 있습니까?

URL / check를 통해 스프링 컨트롤러를 호출하는 jsp 페이지에 아약스가 있습니다.

$.ajax({
    type : "GET",
    url : "${pageContext.request.contextPath}/check",
    data : {
    "id" : ${articleCount}
    },
    success: function(data){
    //response from controller
    }
});

이제 컨트롤러는 다음과 같이 보입니다.

@RequestMapping("/check")
public String check(@RequestParam Integer id, HttpServletRequest request,
        HttpServletResponse response, Model model) {
    boolean a = getSomeResult();
    if (a == true) {
        model.addAttribute("alreadySaved", true);
        return view;
    } else
        model.addAttribute("alreadySaved", false);

    return view;
}

모델을 사용하여 데이터를 보내고 성공하면 함수 (데이터)를 "$ {alreadySaved}"로 액세스하려고했지만 빈 상태로 표시됩니다.

보기 페이지에서 참 / 거짓 데이터를 수신 할 수있는 방법이 있습니까?

해결법

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

    1.Spring Ajax 호출 예제에 @ResponseBody 주석을 추가해야한다.

    Spring Ajax 호출 예제에 @ResponseBody 주석을 추가해야한다.

    @RequestMapping("/check")     
    @ResponseBody
    public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) {
        boolean a = getSomeResult();
        if (a == true) {
            model.addAttribute("alreadySaved", true);
            return view;
        } else {
            model.addAttribute("alreadySaved", false);
            return view;
        }
    }
    
  2. ==============================

    2.ajax 요청에서 값을 반환하려고하면 @ResponseBody 주석을 사용해야합니다. 당신의 메소드 리턴 타입이 String이기 때문에 문자열 값을 반환하고 JSP로 여러분의 뷰를 반환하지 않도록하십시오.

    ajax 요청에서 값을 반환하려고하면 @ResponseBody 주석을 사용해야합니다. 당신의 메소드 리턴 타입이 String이기 때문에 문자열 값을 반환하고 JSP로 여러분의 뷰를 반환하지 않도록하십시오.

    jsp를 다시 렌더링 할 것이기 때문에

    @ResponseBody
    public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) {
        boolean a = getSomeResult();
        if (a == true) {
            return "already saved";
        } 
        return "error exist";
    }
    

    그리고 당신의 JSP에서,

    success: function(data){
        alert(data);
    }
    
  3. ==============================

    3.@ResponseBody 사용

    @ResponseBody 사용

    @ResponseBody 어노테이션을 추가하면 Spring은 나가는 HTTP 응답 본문에 반환 값을 바인딩합니다.

    @ResponseBody
    public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) {
        boolean a = getSomeResult();
        if (a == true) {
            return "already saved";
        } 
        return "error exist";
    }
    

    Spring은 요청 메시지에 사용 된 Content-Type을 기반으로 HTTP 메시지 변환기를 사용하여 반환 값을 HTTP 응답 본문 [응답 본문에 직렬화]으로 변환합니다.

    더 많은 정보를 위해서:

    http://websystique.com/springmvc/spring-mvc-requestbody-responsebody-example/

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

    4.컨트롤러 부분

    컨트롤러 부분

    Spring Ajax 호출 예제에 @ResponseBody 주석을 추가해야한다.

    부품보기

    $.ajax({
        type : "GET",
        url : "${pageContext.request.contextPath}/check",
        data : {
            "id" : ${articleCount}
        },
        success: function(data){
            $('#input_field').val(data);
        }
    });
    
  5. from https://stackoverflow.com/questions/26795027/how-can-i-get-data-from-spring-controller-by-ajax by cc-by-sa and MIT license