복붙노트

[SPRING] Ajax 요청을 사용하여 스프링 컨트롤러에서 뷰를 반환하는 방법은 무엇입니까?

SPRING

Ajax 요청을 사용하여 스프링 컨트롤러에서 뷰를 반환하는 방법은 무엇입니까?

나는 jquery를 사용하여 ajax 요청을하고, 다음 스프링 컨트롤러를 호출한다.

@RequestMapping(value = "/dialogController", method = RequestMethod.POST)
public String dialogController(Model model, @RequestBody MyClass myclass) {
  myClass.setTitle("SUCCESS");       
  model.addAttribute("myClass",myClass);
  return "dialogContent";  //this resolves to dialogContent.jsp
}

그러나 다음과 같은 오류가 나타납니다.

org.springframework.web.HttpRequestMethodNotSupportedException: 
Request method 'POST' not supported

그리고 여기 jQuery를 사용하여 만들고있는 ajax 호출이 필요하다면 :

   jq.postJSON("/dialogController", myClass, function(data) {
      myDialog.html(data);
      myDialog.dialog('open'); 
      //dialog settings previously assigned, 
      //but the success callback function is not reached anyway
    });

편집하다 내가 사용하면 같은 오류가 발생합니다 :

jq.ajax({
  type: 'POST',
  url: "/dialogController",
  data:myClass,
  success:  function(data) {            
         previewDialog.html(data);
         previewDialog.dialog('open');
  });

해결법

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

    1.집에있는 시청자를 위해 ... 문제가 아약스 호출과 일치하지 않는 컨트롤러에 정의 된 메서드 서명 때문인 것으로 나타났습니다. 모델 메서드 매개 변수를 컨트롤러 메서드에서 제거했습니다. 나는 또한 새로운 모델과 시각을 돌려 주어야한다는 것을 깨달았습니다. 다음은 작업 코드입니다.

    집에있는 시청자를 위해 ... 문제가 아약스 호출과 일치하지 않는 컨트롤러에 정의 된 메서드 서명 때문인 것으로 나타났습니다. 모델 메서드 매개 변수를 컨트롤러 메서드에서 제거했습니다. 나는 또한 새로운 모델과 시각을 돌려 주어야한다는 것을 깨달았습니다. 다음은 작업 코드입니다.

    var myJSON  = {"title":"help"}; 
    myJSON = JSON.stringify(myJSON);
    
    <c:url var="postAndView" value="/PostJSONMAV" />
    ...
    jQuery.ajax({
        type: 'POST',
        url: "${postAndView}",
        data:myJSON,
        contentType: "application/json",
        success:  function(data) {          
            previewDialog.html(data);
            previewDialog.dialog('open');
        }
    });
    

    나는 ajax 호출로 바꿨지 만 jQuery.postJSON ()은 아마 작동 할 것이다. 아래에 새 컨트롤러 코드가 있습니다.이 컨트롤러 코드는 새 객체를 모델에 추가하고 jsp 페이지를 반환합니다.이 페이지는 대화 상자에서 열립니다.

    @RequestMapping(value = "/PostJSONMAV", method = RequestMethod.POST)
    public  ModelAndView postJSON(@RequestBody MyClass myClass) {
        ModelAndView mav = new ModelAndView();
        myClass.setTitle("SUCCESS");
        mav.setViewName("dialogContent");
        mav.addObject("myClass", myClass);
        return mav;     
    }
    
  2. from https://stackoverflow.com/questions/7028507/how-do-i-return-a-view-from-a-spring-controller-using-an-ajax-request by cc-by-sa and MIT license