티스토리 뷰

728x90

@RestController = @Controller + @ResponseBody

 

아주 간단한 내용이지만 이 둘의 차이를 모르면 많은 시간을 낭비 할 수도 있다. 

 

아래와 같이 코드를 만들었는데 /index는 잘 찾는데,  /test는 찾지 못하는 상황이 발생됐다. 아래에서 /test를 못찾는 이유는 @RestController로 선언 해주어야 하는데 단순 @Controller로 선언해주었기 때문! 

@Controller
public class TestController {

    @RequestMapping(value="/test", method = RequestMethod.POST)
    public ResponseEntity<?> test() {
        return new ResponseEntity<>("test completed!", HttpStatus.OK);
    }

    @RequestMapping(value="/index", method = RequestMethod.GET)
    public String index() {
        return "index";
    }

}

 

그럼 @RestContoller로 바꿔주면 아무런 문제가 없을까? @RestController로 바꿔주면 index 화면을 찾는게 아니라 웹 화면에 "index"라는 텍스트를 보여준다. 이미 많은 시간을 낭비했기 때문에 여기서도 또 쁘띠 좌절을 맛 봄 ㅠ 왜 나에게 이런 시련이...

 

그래서 찾아 본 @Controller와 @RestController의 차이는 @ResponseBody의 포함여부이다.

그래서 하나의 컨트롤러에서 api용과 mvc용을 같이 사용하고 싶으면 아래와 같이 기본 컨트롤러로 선언하고, api용으로 만든 메서드에 @ResponseBody를 붙여주면 된다😬

@Controller
public class TestController {

    @ResponseBody
    @RequestMapping(value="/test", method = RequestMethod.POST)
    public ResponseEntity<?> test() {
        return new ResponseEntity<>("test completed!", HttpStatus.OK);
    }

    @RequestMapping(value="/index", method = RequestMethod.GET)
    public String index() {
        return "index";
    }

}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함