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 형태로 반환된 것을 볼 수 있습니다.
그런데 여기서 더 간단하게 만드는 방법이 있습니다.
바로 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;
}
}
빌드 후 실행하면 이전과 같이 정상 작동하는 것을 볼 수 있습니다.
그런데 갑자기 TestApi의 getter를 삭제하면 어떻게 될지 호기심이 생겨 한번 password 변수의 getter를 제거하고 실행시켜봤습니다.
password는 사라지고 id만 나오네요.
그럼 id의 getter까지 삭제하면 어떻게 될까요?
아예 에러가 나버립니다.
객체를 반환할 때 getter가 잘 설정되어있는지 한 번씩은 확인해봐야 할 것 같습니다.
출처
'Study > Spring Boot' 카테고리의 다른 글
[Spring Boot] 의존성 주입과 스프링 빈 등록 (0) | 2022.02.13 |
---|---|
[Spring Boot] Service와 테스트 케이스 만들기 (0) | 2022.02.13 |
[Spring Boot] Repository와 테스트 케이스 만들기 (0) | 2022.02.13 |
[Spring Boot] Spring Boot 동작 구조 (0) | 2022.02.12 |
[Spring Boot + Kotlin] 프로젝트 생성 (0) | 2021.09.15 |