@RestController
와 @Controller
모두 웹 애플리케이션 요청을 처리하는 컨트롤러를 만드는 어노테이션이다.
컨트롤러는 MVC 모델에서 사용한다
요청을 처리하고 모델 데이터를 준비하고 뷰를 반환하는 메소드를 정의할 수 있다.
html 뷰를 렌더링한다는 것
메소드에 @GetMapping
@PostMapping
등을 사용해서 연결한다
@Controller
public class MyController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
}
hello라는 뷰를 반환한다
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으로 응답을 보내면 프론트엔드에서 받아서 처리를 통해 화면에 표시(뷰페이저 구성)할 수 있다.
프론트엔드 서버가 클라이언트를 의미함
@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)로 반환해도 된다
}