요청메소드에서 기본적인 반환 방법(비효율적)
기본적으로 thyme 라이브러리에 따라서 템플릿 엔진이 적용된 SpringBoot에서는 Controller에서 문자열을 반환하면 /templates 폴더에서 해당 문자열의 .html 파일을 찾아서 반환한다.
•
이 말은 "{\"name\":\"Robbie\",\"age\":95}" 이것을 반환해도 저 자체를 html파일 이름인 줄 착각한다는 것.
•
따라서 html 파일이 아닌 JSON 데이터를 브라우저에 반환하고 싶다면 해당 메서드에 @ResponseBody 애너테이션을 추가해줘야한다.
@GetMapping("/json/string")
@ResponseBody
public String helloStringJson() {
return "{\"name\":\"Robbie\",\"age\":95}";
}
Java
복사
위와 같이 문자열 자체를 암호처럼 반환하는 것은 개발자가 불편함을 느낄 가능성이 높다. 따라서 아래 다른 방식으로 JSON 데이터를 반환하는 것을 보자.
Java 객체를 반환하면 JSON으로 바꿔준다.
Java가 객체 지향 언어인 점에서 Spring의 객체를 JSON으로 바꿔주는 기능은 최적의 조합이다. Spring은 자동으로 컨트롤러에서 반환되는 객체를 JSON으로 변환해준다.
@GetMapping("/response/json/class")
@ResponseBody
public Star helloClassJson() {
return new Star("Robbie", 95);
}
Java
복사
•
하지만 이것도 마찬가지로 JSON 데이터를 브라우저에 반환하고 싶다면 해당 메서드에 @ResponseBody 애너테이션을 추가해줘야한다.
@ResponseBody 붙이는게 귀찮다. @RestController
@RestController = @Controller + @ResponseBody
메소드들이 들어있는 클래스 상단에 @RestController 를 작성하면, 그 안의 메소드들은 모두 @ResponseBody 애너테이션이 추가되는 효과를 볼 수 있다.
@RestController // <<------이것
@RequestMapping("/response/rest")
public class ResponseRestController {
@GetMapping("/json/string")
//@ResponseBody <<------ 필요없어짐!
public String helloStringJson() {
return "{\"name\":\"Robbie\",\"age\":95}";
}
@GetMapping("/json/class")
//@ResponseBody <<------ 필요없어짐!
public Star helloClassJson() {
return new Star("Robbie", 95);
}
}
Java
복사