[SpringBoot] Client에게 JSON 형식의 데이터를 반환하는 방법

정재현·2024년 1월 22일
0

Spring Boot

목록 보기
15/19
post-thumbnail

JSON 데이터 반환하는 방법

템플릿 엔진이 적용된 SpringBoot에서는 Controller에서 문자열을 반환하면 templates 폴더에서 해당 문자열의 .html 파일을 찾아서 반환을 해준다.

1. JSON형태로 생기 String을 반환

Java는 JSON 타입을 지원하지 않기 때문에 JSON 형태의 String 타입으로 변환해서 사용해야한다.
→ 따라서 HTML파일이 아닌 JSON형태를 띄는 String데이터를 브라우저에 반환하고 싶다면 해당 메서드에 HTMP파일이 아닌 있는 그대로를 반환해주는 @ResponseBody 애너테이션을 추가해줘야한다

  • 예시
@GetMapping("/json/string")
@ResponseBody
public String helloStringJson() {
    return "{\"name\":\"Robbie\",\"age\":95}";
}

2. Java 객체로 만들어서 반환

Spring에서는 자동으로 Java의 객체를 JSON으로 변환해준다.

  • Java 객체 → JSON 으로 자동 변환

  • 예시) Star.java

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() {}
}
  • 예시) ResponseController.java
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 {
    // [Response header]
    //   Content-Type: text/html
    // [Response body]
    //   {"name":"Robbie","age":95}
    @GetMapping("/json/string")
    @ResponseBody
    public String helloStringJson() {
        return "{\"name\":\"Robbie\",\"age\":95}";
    }

    // [Response header]
    //   Content-Type: application/json
    // [Response body]
    //   {"name":"Robbie","age":95}
    @GetMapping("/json/class")
    @ResponseBody
    public Star helloClassJson() {
        return new Star("Robbie", 95);
    }
}

@RestController

= @Controller + @ResponseBody

  • @RestController를 사용하면 해당 클래스의 모든 메서드에 @ResponseBody 애너테이션이 추가되는 효과를 부여할 수 있다.

    • @RequestBody : 이 애너테이션이 붙은 파라미터에는 http요청의 본문(body)이 그대로 전달된다.
      → 일반적인 GET/POST의 요청 파라미터라면 @RequestBody를 사용할 일이 없지만, xml이나 JSON기반의 메시지를 사용하는 요청의 경우 이 방법이 매우 유용하다.
  • 예시)

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

Response 트렌드의 변화



과거의 서버는 요청을 받아 HTML/CSS/JS 파일을 반환하는게 주 없무였지만 최근의 경향으로는 그렇지 않다.
최근에는 서버가 직접 View(HTML/CSS/JS)를 반환하기 보다는 요청에 맞는 특정한 정보만 반환하는 것을 조금 더 선호한다. 그래서 요즘에는 주로 서버에서는 데이터 교환 포맷 중 JSON형태로 데이터를 반환하는데 아래와 같이 생겼다.

  • JSON 데이터 형태

  • Clien와 Server가 데이터를 주고받는 방식


정리하기

  • Spring에서는 객체 형태로 데이터를 반환하면 JSON형태로 자동으로 변경해준다.

profile
공부 기록 보관소

0개의 댓글