Blog

[Spring]14_2 JSON 데이터를 클라이언트에 반환하는 방법

Author
Summary
Spring에서 객체는 JSON이 된다.
Category
Study
Tags
Spring
Favorite
Memory Date
2023/08/29
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
6 more properties
💡
요청메소드에서 기본적인 반환 방법(비효율적)
기본적으로 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
복사