-
스프링에서 컨트롤러에서 비동기처리java/스프링공부 2020. 7. 9. 22:40728x90
비동기식 Controller
댓글 작업은 Ajax를 이용하여 비동기식 통신 작업으로 처리 하려고 합니다. Spring에서 비동기식 통신을 지원하는데 두 가지 방식이 있습니다. 하나는 스프링 3.x 이하에서만 지원되는 @ResponseBody 어노테이션을 사용하는 방법이고, 다른 하나는 4.x 이상 버전에서 지원하기 시작한 @RestController를 사용하는 방식입니다.
여기서는 @RestController을 이용한 방식을 사용하지만, @ResponseBody를 사용하는 방식에 대해서도 간략하게 확인하고 넘어 가도록 하겠습니다.
@ResponseBody를 이용한 방식 (스프링 3.x 이하)
@ResponseBody는 기존의 controller을 그대로 이용하여 작업 할 수 있습니다. 즉 한 Controller 안에 동기 통신 방식과 비동기식 통신방식 모두를 구현해 넣을 수 있습니다. 방법은 간단합니다. 비동기식 통신을 할 서비스(메소드) 앞에 @ResponseBody 어노테이션을 붙여 주기만 하면 됩니다.
@ResponseBody 방식 예
@RequestMapping(value = "/getBoardList", method = RequestMethod.GET) public string getBoardList(Model model) throws Exception { // 동기식 방법 // 생략 } @ResponseBody @RequestMapping(value = "/getReplyList", method = RequestMethod.POST) public List<ReplyVO> getReplyList(int bid) throws Exception{ // 비동기식 방법 // 생략 }
@RestController를 이용한 방식 (스프링 4.x 이상)
이 방식은 클래스명 앞에 @Controller 사용하는 대신 @RestController를 사용해야 하기 때문에 새로운 클래스를 만들어야 합니다. 따라서 아래 그림과 같이 Controller 패키지 아래 RestBoardController.java 라는 새로운 파일을 생성하고 아래와 같이 코드를 입력해 봅니다.
동기식 컨트롤러를 그대로 두고 새로운 컨트롤러를 만들어야함
RestBoardController.java 신규 추가
package com.freehoon.web.board.controller; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.freehoon.web.board.model.ReplyVO; import com.freehoon.web.board.service.BoardService; @RestController @RequestMapping(value = "/restBoard") public class RestBoardController { private static final Logger logger = LoggerFactory.getLogger(BoardController.class); @Inject private BoardService boardService; @RequestMapping(value = "/getReqlyList", method = RequestMethod.POST) public List<ReplyVO> getReplyList(@RequestParam("bid") int bid) throws Exception { return boardService.getReplyList(bid); } }
HTPP 통신으로 컨트롤러를 호출하지 않을때
@RestController는 @Controller와 @ResponseBody가 합쳐진 어노테이션입니다. view가 필요없는 API만 지원하는 서비스에서 사용하면 되는데 저는 view가 필요하기 때문에 @Controller를 사용해야합니다. 만약 @RestController를 사용하면 화면에 리턴을 "redirect://localhost:8080/board"하면 그대로 출력됩니다.
728x90'java > 스프링공부' 카테고리의 다른 글
스프링에서 ajax요청시 주의사항 (0) 2020.08.18 스프링에서 restapi 만들때 주의할점 (0) 2020.07.10 스프링에서 jsp랑 서블릿 역할 (0) 2020.07.09 스프링에서 controller에서 return페이지가 없는 void함수 (0) 2020.06.28 RedirectAttributes란 (0) 2020.06.25