본문 바로가기
Study/Spring Boot

[Spring Boot] JSON 형태로 객체 반환하기

by DevJaewoo 2022. 2. 12.
반응형

Spring LOGO

Intro

API 서버를 만들 때 일반적으로 클라이언트한테 JSON 형식으로 데이터를 넘겨줍니다.

하지만 아래처럼 JSON 데이터를 일일이 조립하면 생산성도 떨어질뿐더러 오류가 날 확률이 높습니다.

 

String json = "{\"name\" : \"" + name + "\"}";
return json;

 

Spring에선 @ResponseBody 어노테이션을 통해 객체를 직접 JSON으로 변환시켜줄 수 있습니다.

이번 시간엔 JSON 형태로 response를 보내는 방법에 대해 알아보겠습니다.


JSON 형태로 반환하기

우선 JSON으로 변환시킬 객체를 만들어보겠습니다.

 

TestApi.java

public class TestApi {
    private String id;
    private String password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

 

그다음 Controller에서 Mapping 된 함수에 @ResponseBody 어노테이션을 추가하고,

조금 전에 만들었던 TestApi 객체를 만들어 return 해줍니다.

 

TestController.java

@Controller
public class TestController {

    @GetMapping("Test")
    @ResponseBody
    public TestApi test() {
        TestApi testApi = new TestApi();
        testApi.setId("test");
        testApi.setPassword("password");

        return testApi;
    }
}

 

서버를 실행해보면 아래와 같이 TestApi 객체가 JSON 형태로 반환된 것을 볼 수 있습니다.

함수에 responsebody 적용 후 JSON 반환

 

그런데 여기서 더 간단하게 만드는 방법이 있습니다.

바로 TestController를 @Controller가 아닌 @RestController로 선언하는 것입니다.

@RestController는 함수 하나하나 @ResponseBody를 선언해줘야 하는 번거로움을 덜기 위해

@Controller@ResponseBody를 합쳐놓은 어노테이션입니다.

 

RestController를 사용하면 위의 TestController를 다음과 같이 바꿀 수 있습니다.

 

TestController.java

@RestController
public class TestController {

    @GetMapping("Test")
    public TestApi test() {
        TestApi testApi = new TestApi();
        testApi.setId("test");
        testApi.setPassword("password");

        return testApi;
    }
}

 

빌드 후 실행하면 이전과 같이 정상 작동하는 것을 볼 수 있습니다.

RestController 적용 후 JSON 반환


그런데 갑자기 TestApi의 getter를 삭제하면 어떻게 될지 호기심이 생겨 한번 password 변수의 getter를 제거하고 실행시켜봤습니다.

 

Getter 제거 후 결과

 

password는 사라지고 id만 나오네요.

그럼 id의 getter까지 삭제하면 어떻게 될까요?

Getter 전부 제거 후 결과

 

아예 에러가 나버립니다.

객체를 반환할 때 getter가 잘 설정되어있는지 한 번씩은 확인해봐야 할 것 같습니다.


출처

반응형