@RestController 에서 JSON 타입으로 객체를 return 할 때,
원래는 { A : a, B : b } 와 같은 JSON 형태로 return 값을 보내줘야 하지만
객체 자체를 return 해도 위와 같은 JSON 형태로 변환해서 보내주는게 jackson 라이브러리 이죠.
예를들어, 게시판 DTO 객체인 BoardDTO 를 return 하면
VIEW 단에서는 AJAX 등을 통해
res.title / res.contents 와 같은 형식으로 JSON 값을 가져다 쓸 수 있습니다.
하지만 이렇게 객체 자체만을 return 해주는 것에서 더 나아가서
[ 객체자체 + 응답 상태 코드 + header 내용 ]
추가적인 정보까지 함께 응답해 줄 수 있게 해주는 만능 객체 그릇이 바로 ResponseEntity 입니다.
모든 객체 Type 에 상관없이 객체 자체를 body 에 담아서 보낼 수 있고
return 조건에 따라 statusCode 에 응답 상태코드를 담아 보낼 수 있습니다.
VIEW 단 개발자에게 추가적인 정보를 보내기 위해 Header 에 정보를 더 담아서 보낼 수 도 있습니다.
특히나 응답상태 코드를 이용해 조건에 따른 오류 및 처리를 해줄 수 있다는 점 때문에
Rest API 에서는 return Type 을 사실 상 ResponseEntity<?> 로 고정해 두고 많이 사용한다고 합니다.
[ ResponseEntity<?> ]
1. 오류처리 / statusCode
@GetMapping("/hi")
public ResponseEntity<?> hello(String nickname) {
if (nickname ==null || nickname.equals("")){
return ResponseEntity.
badRequest().
build();
}
return ResponseEntity.
ok()
.body(nickname + "님 성공");
}
- null 일 경우, ResponseEntity 에는 데이터 자체를 담을 필요도 없습니다.
status 로 badRequest 만 담아서 return 해줍니다.
- null 이 아닐 경우, ok 상태코드와 함께 body 에 데이터를 담아서 보내줍니다.
2. 헤더에 정보담아 보내기
- 응답을 헤더에 커스텀해서 담아서 보낼 수 있습니다.
=> 클라이언트쪽 개발자에게 필요한 데이터를 전달할 수 있습니다.
@GetMapping("/hi")
public ResponseEntity<?> hello(String nickname) {
if (nickname ==null || nickname.equals("")){
return ResponseEntity.
badRequest().
body("이름을 입력해야 합니다.");
}
// Header로 데이터 (key, value ) 값 전송
HttpHeaders headers = new HttpHeaders();
headers.set("jsoninhead", "value1");
headers.set("secondjson", "value2");
return ResponseEntity.
ok()
.headers(headers)
.body(nickname + "님 성공!");
}
'Back to the Spring' 카테고리의 다른 글
사용자의 요청DTO => @Validated 검사 (0) | 2023.01.18 |
---|---|
JPA Paging 처리 (Page, Pageable) (2) | 2023.01.18 |
[ Spring ] 프레임워크, DI, Entity / DTO (0) | 2023.01.15 |
[Spring Security] Authentication Failure Handler 적용 (0) | 2022.12.24 |
[ Spring Security ] OAuth2 구글 / 네이버 로그인 (2) | 2022.12.23 |