2015-01-06 3 views
-1

현재 스프링 3 MVC를 웹 응용 프로그램에 사용하고 있으며 스프링 3 편안한 (@ResponseBody) 기능을 사용하여 모든 컨트롤러를 편안한 웹 서비스로 마이그레이션하는 데 intereseted입니다. JSON 요청 및 응답을 사용하고 있습니다. 하지만 JSON 응답을 사용할 때 여러 웹 요청에서 동일한 데이터를 사용할 수 있도록 세션 관리를 수행하는 방법을 잘 모릅니다. 장단점이있는 모든 항목을 제안하십시오스프링 컨트롤러를 안정된 웹 서비스 컨트롤러로 옮기기

답변

1

컨트롤러 내부에서 세션이 필요한 경우 요청을 메소드 매개 변수로 추가하기 만하면 Spring이 작업을 수행합니다. 그런 다음 요청시 getSession()으로 전화하면 여기에 있습니다.

public void myMethodInController(HttpServletRequest request) { 
     HttpSession session = request.getSession(); 
} 

이것은 응답자와 아무런 관련이 없습니다. 순수한 스프링 MVC입니다.

편집 :

public ResourceOne myMethodInControllerOne(HttpServletRequest request, DataOne data) { 

     // call some injected service to create a ResourceOne 
     ResourceOne response = service.doSomething(data); 

     if (null != response) { 
      HttpSession session = request.getSession(); 
      session.setAttribute("dataOne", data); 
     } 
     return response; 
} 


public ResourceTwo myMethodInControllerTwo(HttpServletRequest request, DataTwo data) { 

     HttpSession session = request.getSession(); 
     DataOne priorData = (DataOne) session.getAttribute("dataOne"); 

     // call some injected service to create a ResourceTwo 
     ResourceTwo response = service.doSomething(data, priorData); 
     return response; 
} 

을하지만이 정말 편안되지 않습니다 : 당신이 세션을 통해 서 컨트롤러 사이의 양식 데이터를 공유하려는 경우, 당신은 예를 들면 할 수 있습니다. Rest는 상태 비 저장 API를 의미합니다. 두 번째 방법으로 API를 변경하고 DataOne과 DataTwo를 보내는 것이 더 좋지 않습니까?

+0

마치 다양한 컨트롤러를 사용하여 다양한 작업을 수행 할 수 있으며 모든 컨트롤러를 안정적인 웹 서비스로 변환해야합니다. 이전에는 모든 데이터를 세션에 저장했지만 이제는 각 컨트롤러가 웹 서비스처럼 작동하고 JSON으로 응답을 보냅니다. 내 생각에, httpsession은 유용하지 않을 것이다. 프런트 엔드에서는 node.js를 사용하고 있습니다. – sahas

+0

컨트롤러가 여러 개인 경우 JSON 응답을 보내는 웹 서비스처럼 작동합니다. 몇 가지 데이터로 처음으로 내 웹 서비스 컨트롤러를 호출 할 때. 다른 컨트롤러를 호출 할 때 어떻게 동일한 데이터를 사용할 수 있습니까? – sahas

+0

위의 대답에서 설명한대로'HttpSession'을 사용하십시오. REST/JSON 웹 서비스는 특별한 경우가 아닙니다. – Steve

관련 문제