Spring/Springboot-Intellij

[SpringBoot] Spring MVC - 데이터를 Client에 반환하는 방법(JSON), RestController

congs 2025. 1. 30. 03:37

 

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

 

JSON 데이터를 반환하는 방법

먼저, Controller생성하고 반환해보자!

1. 반환값이 String

response이름의 패키지 생성 - ResponseController라는 java 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;

//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일 예정)

형태를 변경하면 Text로, JSON으로 볼 수 있음!

 

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에 밑줄이 생겨있음으로 
    1. 마우스를 올려 만들거나
    2. ALt + Enter 
    3.  직접 생성하는 방법으로 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를 사용함

각 메서드에 @ResponseBody를 넣지 않아도 오류가 나지 않음!

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);
    }
}