독서하는 개발자's Blog

반응형

✔️ Spring @RestController 리턴 타입별 응답 형태 정리

@RestController는 내부적으로 @Controller + @ResponseBody가 결합된 형태로,
메서드의 리턴값을 자동으로 HTTP Response Body에 담아 내려주는 역할을 한다.

하지만 리턴 타입에 따라 실제 응답 형태가 달라진다.
특히 String, List, Map, void는 응답 방식이 모두 다르기 때문에 헷갈릴 수 있다.

아래에서 실전 예제와 함께 명확하게 정리해보자.


✅ 1. String 리턴 — “JSON이 아니라 순수 문자열”

 
@GetMapping("/str") public String str() { return "ok"; }

📌 응답

 
ok
  • JSON 객체가 아님
  • "ok" 같은 JSON string도 아님
  • 그냥 순수 텍스트로 내려감
  • Content-Type은 보통 text/plain 또는 application/json이지만 body는 문자열 그대로

✅ 2. List 리턴 — JSON 배열 변환

 
@GetMapping("/list") public List<String> list() { return List.of("a", "b", "c"); }

📌 응답(JSON Array)

 
["a", "b", "c"]
  • List는 자동으로 JSON 배열로 직렬화(Jackson 변환) 된다.

✅ 3. Map 리턴 — JSON 객체 변환

 
@GetMapping("/map") public Map<String, Object> map() { return Map.of("result", "ok"); }

📌 응답(JSON Object)

 
{ "result": "ok" }
  • Map은 JSON Object로 변환된다.
  • 키가 JSON의 속성명이 된다.

✅ 4. void 리턴 — 응답 바디 없음

 
@GetMapping("/empty") public void empty() {}

📌 응답

  • Body: 없음
  • Status: 200 OK

@RestController라도 리턴값이 없으면 JSON을 만들 수 없기 때문에 응답 바디도 없다.


⭐ 한눈에 요약

리턴 타입응답 형태
String 순수 문자열 반환 (JSON 아님)
List JSON 배열
Map JSON 객체
POJO 객체 JSON 객체
void 바디 없음 / 200 OK

💡 추가 팁: 문자열을 JSON처럼 보내고 싶다면?

아래처럼 Map으로 감싸서 보내는 것이 가장 RESTful하다.

 
@GetMapping("/strjson") public Map<String, String> strjson() { return Map.of("value", "ok"); }
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band