서버로 요청을 하면 다양한 응답을 보내준다.
그중 다양한 데이터를 담아서 보내는 JSON 형식을 많이 사용하는데, Spring에서는 어떻게 응답을 하는지 한번 알아보도록 하자.
우선, JSON 이 무엇인지 알아두는게 좋다.
{
"key":value,
"key":value,
"key":[
{"key":value, "key":value, "key":value},
{"key":value, "key":value, "key":value},
{"key":value, "key":value, "key":value},
],
}
객체와 JSON 형식 문자열간 변환을 처리하는 라이브러리이다.
비슷한 라이브러리로 GSON과 SimpleJSON이 있다.
전부 ObjectMapper를 통해 따로 세팅을 해줘야하지만, 스프링에서 Jackson을 사용하는 이유는 관계의 장점이 있다.
이 Jackson에 대해서는 다른 글로 자세히 알아보도록 하겠다.
아래 예제들을 보기 전, DTO를 작성해보도록 하자.
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Builder
public class MemberDTO{
private String name;
private String email;
private int age;
}
Spring 4.x 에서는 @RestController라는 어노테이션이 존재하지 않아 일반적인 @Controller 어노테이션을 사용해 각 요청메서드마다 @ResponseBody를 추가하였지만, 버전업이 된 이후로 @RestController메서드가 추가되어 메서드에 따로 @ResponseBody 어노테이션을 붙혀주지 않아도 된다.
이 어노테이션은 요청에대한 응답을 본문의 객체로 변환하여 클라이언트에게 전송하기 위해 사용된다.
아래처럼 작성을 한다면 Spring에서 자동으로 Jackson을 통해 JSON형태로 변환하여 클라이언트에게 응답을 해준다.
@Controller
public class TestController{
@RequestMapping(value="/test", method=RequestMethod.GET)
@ResponseBody
public MemberDTO getMember(){
MemberDTO mem = MemberDTO.builder()
.name("홍길동")
.email("test@test.com")
.age(23)
.build();
return mem;
}
}
MVC 중 V를 담당하는 View를 보여줄때는 ReponseBody가 필요없기에 RestConroller보다는 Controller를 많이 사용한다.
이 어노테이션은 Spring4이후에 생긴 어노테이션인데 이 어노테이션은 Controller와 ResponseBody 어노테이션을 포함하고있기에 RestApi를 구현할 때 많이 사용된다.
원리는 위 ResponseBody를 사용할때와 똑같다.
@RestController
public class TestController{
@RequestMapping(value="/test", method=RequestMethod.GET)
public MemberDTO getMember(){
MemberDTO mem = MemberDTO.builder()
.name("홍길동")
.email("test@test.com")
.age(23)
.build();
return mem;
}
}