본문 바로가기

Backend/SpringBoot

SpringBoot로 JSON 응답 보내는 방법 (GSON JsonObject, @ResponseBody, @RestController)

안녕하세요! 이번에는 Spring Boot에서 JSON 형태로 return을 해주는 방법에 대해 알아보겠습니다.

정말 간단하기 때문에 쉽게 따라오실 수 있습니다!

 

💃 준비 - DTO 만들기

예시를 보여주기 위해 간단한 DTO를 만들어줍니다.

@Setter
@Getter
public class Blog {
    private String title;
    private String content;
}

 

👀 어노테이션 사용하기

컨트롤러 단에서 JSON 객체를 문자열로 간편하게 직렬화 할 수 있게 도와주는 두 어노테이션을 소개합니다.

 

@RestController

데이터를 전송하기 위한 컨트롤러로 사용하며,@RestController를 사용하면 기본으로 하위에 있는 메소드들은 모두 @ResponseBody를 가지게 됩니다.

@RestController
public class TestController {

    @RequestMapping("/test1")
    public Blog test1(){

        Blog blog = new Blog();

        blog.setTitle("테스트1");
        blog.setContent("테스트1 내용");

        return blog;

    }
}

이런 식으로 클래스 위에 @RestController 어노테이션을 붙여주면 됩니다.

@RestController를 이용한 예제 실행결과

 

 

@ResponseBody

이 어노테이션은 @Controller를 가지고 있지만, 텍스트를 반환하고 싶을 때 사용합니다. 아래 코드를 보시면 쉽게 이해가 가능합니다.

@Controller
public class TestController {

    @ResponseBody
    @RequestMapping("/test2")
    public Blog test2(){

        Blog blog = new Blog();

        blog.setTitle("테스트2");
        blog.setContent("테스트2 내용");

        return blog;

    }
}

@ResponseBody를 이용한 예제 실행결과

 

🦕 GSON 사용하기

모든 것을 @RestController@ResponseBody로 해결할 수 있으면 정말 좋지만, JSON 객체를 직접 만들어야 할 때가 발생하는데, 그럴 때 사용하는 방법입니다.

 

가장 먼저 의존성을 추가해줍니다.

// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: 'com.google.code.gson', name: 'gson', version: '2.7'

(만약 Maven을 사용한다면 링크에서 확인할 수 있습니다.)

 

@Controller
public class TestController {

  @ResponseBody
  @RequestMapping("/test3")
  public String test3(){
    JsonObject obj =new JsonObject();

    obj.addProperty("title", "테스트3");
    obj.addProperty("content", "테스트3 내용");

    JsonObject data = new JsonObject();

    data.addProperty("time", "12:00");

    obj.add("data", data);

    return obj.toString();
  }

}

JsonObject의 addProperty를 사용해서 쉽게 JSON을 커스텀 할 수 있고, 객체 안에 객체를 넣을 수도 있습니다. 이 포스팅에서는 소개하지 못했지만, JsonArray를 사용하면 배열도 담을 수 있습니다.

GSON JsonObject를 이용한 예제 실행결과

 


 

이렇게 해서 제가 아는 JSON 형식으로 응답 보내는 방법에 대한 포스팅이 끝났습니다!

혹시 보충하고 싶은 내용이나 잘못된 내용이 있으면 지적해주시면 감사하겠습니다 :)