
웹 생태계가 고도화 되는 과정중에 상대적으로 프론트엔드와 백엔드가 각각 따로 발전하게 되면서, 느슨하게 결합하는 방식을 더 많이 채택하게 되었고, 최근에는 서버가 직접 뷰(html/css/js)를 반환하기 보다는 요청에 맞는 특정한 정보만 반환하는 것을 조금 더 선호하기도 합니다. 그래서 요즘에는 주로 서버에서는 데이터 교환 포맷 중 JSON 형태로 데이터를 반환하기도 합니다.
JSON 데이터를 반환하는 방법
먼저, Controller생성하고 반환해보자!
1. 반환값이 String

package com.sparta.springmvc.response;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
//Content-Type: text/html
//Response Body
//{"name":"Robbie","age":95}
@Controller
@RequestMapping("/response")
public class ResponseController {
@GetMapping("/json/string")
@ResponseBody
public String helloStringJson() {
return "{\"name\":\"Robbie\",\"age\":95}";
}
}
- JSON
- JAVA에서 읽을 수 없음! JavaScript에 있는 타입
- => JSON형태로 생긴 String파입으로 반환 (그래서 타입은 Text/html일 예정)

2. 반환값이 String외 자바 Class

package com.sparta.springmvc.response;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/response")
public class ResponseController {
//Content-Type: text/html
//Response Body
//{"name":"Robbie","age":95}
@GetMapping("/json/string")
@ResponseBody
public String helloStringJson() {
return "{\"name\":\"Robbie\",\"age\":95}";
}
// Content-Type: application/json : JSON형태로 만들어 반환하겠다 (Key : Value)
// Response body : html파일이 아니라 데이터를 반환하겠다는 의미
// {"name":"Robbie","age":95}
@GetMapping("/json/class")
@ResponseBody
public Star helloClassJson(){
return new Star("Robbie", 95);
}
}
- Star에 밑줄이 생겨있음으로
- 마우스를 올려 만들거나
- ALt + Enter
- 직접 생성하는 방법으로 java class 를 생성

package com.sparta.springmvc.response;
import lombok.Getter;
@Getter
public class Star {
String name;
int age;
public Star(String name, int age) {
this.name = name;
this.age = age;
}
public Star() {}
}
실행해보면, 아까와 달리 Text가 아닌 JSON이 기본으로 출력됨을 볼 수 있음

RestController
- @RestController 애너테이션을 사용
- @Controller + @ResponseBody 라고 생각하면 됨!
- 해당 클래스의 모든 메서드에 @ResponseBody 애너테이션이 추가되는 효과 부여
- (@ResponseBody : html이 아닌 데이터를 반환한다는 의미)
- 요즘에는 html파일을 반환하는 서버는 front에서 따로 관리하고,
- JSON을 사용하는 부분은 따로 서버를 만들어 나눠 개발하는 추세여서 RestController를 사용함

package com.sparta.springmvc.response;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/response/rest")
public class ResponseRestController {
// [Response header]
// Content-Type: text/html
// [Response body]
// {"name":"Robbie","age":95}
@GetMapping("/json/string")
public String helloStringJson() {
return "{\"name\":\"Robbie\",\"age\":95}";
}
// [Response header]
// Content-Type: application/json
// [Response body]
// {"name":"Robbie","age":95}
@GetMapping("/json/class")
public Star helloClassJson() {
return new Star("Robbie", 95);
}
}
'Spring > Springboot-Intellij' 카테고리의 다른 글
[SpringBoot] Spring MVC - Path Variable과 Request Param (0) | 2025.01.30 |
---|---|
[SpringBoot] Spring MVC - Jackson, ObjectMapper (0) | 2025.01.30 |
[SpringBoot] Spring MVC - 정적 페이지(thymeleaf, redirect, template)와 동적 페이지(Model) (0) | 2025.01.29 |
[SpringBoot] Spring MVC - 인텔리제이(IntelliJ)를 이용하여 Controller생성, 이해하기 (0) | 2025.01.29 |
[SpringBoot] SPRING MVC, Servlet, DispatcherServlet (0) | 2025.01.28 |