public class User {
private String id;
private String name;
private String email;
public User(String id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
@Data
public class User {
private String id;
private String name;
private String email;
}
@Controller
public class UserController {
@GetMapping("/home")
public String homePage() {
return "home";
}
@GetMapping("/doit")
public String doitPage() {
return "doit";
}
@GetMapping("/userPage")
public String userPage(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "user";
}
@GetMapping("/userModelPage")
public String userPage(@ModelAttribute User user, Model model){
model.addAttribute("user", user);
return "userModel";
}
@ResponseBody
@GetMapping("/responseBody")
public String responseBody() {
return "Hello World!";
}
}

@ResponseBody 어노테이션은 스프링 MVC에서 컨트롤러 메소드의 반환값을 HTTP 응답 본문(Body)에 직접 쓰도록 지시한다. 이는 주로 RESTful 웹 서비스를 구현할 때 사용되며, 반환값을 View 이름으로 해석하는 대신 HTTP 응답의 내용으로 사용된다.
Controller는 주로 웹 페이지를 반환하는데 사용되며, 데이터와 함께 뷰 이름을 반환합니다. 반면에 RestController는 HTTP 응답 본문에 직접 데이터를 쓰는데 사용되며, 주로 RESTful API를 구현하는데 사용됩니다. 즉, RestController는 클라이언트에게 데이터를 반환하고, Controller는 주로 뷰를 반환하는 차이가 있습니다.
@RestController는 @Controller + @RequestBody를 통해 구현된다고 보면 된다.