Controller vs RestController

OneTwoThree·2023년 6월 5일
0

springboot

목록 보기
2/9

@RestController@Controller 모두 웹 애플리케이션 요청을 처리하는 컨트롤러를 만드는 어노테이션이다.

Controller

컨트롤러는 MVC 모델에서 사용한다
요청을 처리하고 모델 데이터를 준비하고 뷰를 반환하는 메소드를 정의할 수 있다.
html 뷰를 렌더링한다는 것
메소드에 @GetMapping @PostMapping등을 사용해서 연결한다

@Controller
public class MyController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}

hello라는 뷰를 반환한다

RestController

RestController는 Controller와 같이 뷰를 반환하는 대신 HTTP 응답으로 직접 데이터를 전송할 수 있다. 자동으로 JSON, XML등의 형식으로 직렬화된 응답을 생성하여 반환한다. 주로 API 엔드포인트를 구현하는데 사용한다.

@RestController
public class MyRestController {
    @GetMapping("/api/hello")
    public String hello() {
        return "Hello, REST!";
    }
}

"Hello, REST"라는 문자열이 JSON 형태로 응답된다.

testMethod3() {
      const id = this.userId
      const pw = this.userPassword
      axios // axios로 post 요청보냄
        .post('http://localhost:8081/auth/login', {
          userId: id,
          password: pw
        }) // res를 받아서 사용. res.data에 받은 data 있음. store의 login 메소드를 호출해서 store에 userId랑 token 값 넣어줌
        .then((res) => {
          if (res.status === 200) {
            this.$store.commit('login', res.data)
          }
        })
        .catch((err) => {
          console.log(err)
        })
    }
  }

RestController를 사용할 경우 위와 같이 vue.js와 같은 프론트 프레임워크에서 백엔드 서버로 요청을 보내고 RestController를 통해서 백엔드에서 json으로 응답을 보내면 프론트엔드에서 받아서 처리를 통해 화면에 표시(뷰페이저 구성)할 수 있다.
프론트엔드 서버가 클라이언트를 의미함

Rest API

  • 웹 서버의 자원을 클라이언트에 구애받지 않고 사용하게 함
  • 화면이 아닌 데이터를 반환함
  • 응답 데이터는 과거 : XML, 현재 : JSON{KEY:VALUE}으로 통일되는 추세
  • HTTP 메소드 GET, POST, PATCH, DELETE 등에 의해 자원을 조작함

상태코드

출처 : 홍팍님 유튜브

    @PostMapping("/api/articles")
    public ResponseEntity<Article> create(@RequestBody ArticleForm dto){
        //dto로(ArticleForm) 클라이언트가 보낸 json을 받아서 엔티티인 Article로 변환함
        Article created = articleService.create(dto);

        return created!=null ?
                ResponseEntity.status(HttpStatus.OK).body(created):
                ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
        //build()는 내용 없이 반환, body(null)로 반환해도 된다 

    }
  • 상태 코드 반환을 위해서는 위와 같이 ResponseEntity 클래스를 사용해 반환함

요약

  • Controller는 MVC 모델에서 일반적인 요청 처리에 사용된다. 뷰를 반환한다.
  • RestController는 RESTful 웹 서비스의 api 엔드포인트에서 json, xml 등의 데이터를 직접 반환하는데 사용한다.

0개의 댓글