티스토리 뷰
ResponseEntity 는 HttpEntity 를 상속받는 클래스로, HTTP 요청 또는 응답에 해당하는
HttpHeader 와 HttpBody를 포함하는 클래스입니다.
ResponseEntity 의 생성자를 봅시다.
HttpStatus 는 필수이고, 그 외에 body, headers(Map) 은 선택적으로 넣을 수 있습니다.
이 세 가지 파라미터를 가진다고 생각하면 되겠습니다.
body – the entity body
headers – the entity headers
status – the status code
/**
* Create a {@code ResponseEntity} with a status code only.
* @param status the status code
*/
public ResponseEntity(HttpStatus status) {
this(null, null, status);
}
/**
* Create a {@code ResponseEntity} with a body and status code.
* @param body the entity body
* @param status the status code
*/
public ResponseEntity(@Nullable T body, HttpStatus status) {
this(body, null, status);
}
/**
* Create a {@code ResponseEntity} with headers and a status code.
* @param headers the entity headers
* @param status the status code
*/
public ResponseEntity(MultiValueMap<String, String> headers, HttpStatus status) {
this(null, headers, status);
}
/**
* Create a {@code ResponseEntity} with a body, headers, and a status code.
* @param body the entity body
* @param headers the entity headers
* @param status the status code
*/
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {
this(body, headers, (Object) status);
}
제 임의대로 코드를 만들어 보았습니다.
MessageRes 클래스를 정의내립니다.
package com.ssafy.api.responseDto;
import lombok.*;
import org.springframework.http.HttpStatus;
@Data
public class MessageRes {
private HttpStatus status;
private String message;
private Object data;
public MessageRes() {
this.status = null;
this.message = null;
this.data = null;
}
}
controller
@PostMapping("/signup")
public ResponseEntity<MessageRes> signUp(@Valid @RequestBody SignUpReq signUpReq){
MessageRes messageRes = new MessageRes();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
messageRes.setStatus(HttpStatus.CREATED);
messageRes.setMessage("유저생성 성공");
messageRes.setData("유저 정보");
userService.createUser(new UserDTO(signUpReq));
return new ResponseEntity<MessageRes>(messageRes, headers, HttpStatus.CREATED);
}
result
위처럼 커스터마이징 하는 것도 좋지만, status 외의 정보들은 크게 필요하지 않아 보입니다.
@PostMapping("/signup")
@ResponseStatus(HttpStatus.CREATED)
Boolean signUp(@Valid @RequestBody SignUpReq signUpReq){
return userService.createUser(new UserDTO(signUpReq));
}
이렇게만 써도 201 코드로 잘 날아옵니다.
상황에 맞게 적절하게 사용하면 좋겠습니다.
수정본입니다.
성공시와 실패시를 나누어 반환합니다.
성공시 Created, 실패시 Bad Request 를 반환합니다.
로직이 마음에 들지는 않는데.. 팀 프로젝트라 일단은 이대로 진행하려고 합니다.
data 부분에 생성한 유저정보(PK)를 넣어도 좋겠습니다.
@PostMapping("/signup")
public ResponseEntity<MessageRes> signUp(@Valid @RequestBody SignUpReq signUpReq){
MessageRes messageRes = new MessageRes();
UserDTO userDto = new UserDTO(signUpReq);
if (userService.createUser(userDto)) {
messageRes.setMessage("유저생성 성공");
return new ResponseEntity<MessageRes>(messageRes, HttpStatus.CREATED);
}
messageRes.setMessage("유저생성 실패");
return new ResponseEntity<MessageRes>(messageRes, HttpStatus.BAD_REQUEST);
}
참고 자료
https://devlog-wjdrbs96.tistory.com/182
'Spring' 카테고리의 다른 글
[DB] -> entity -> (mapper) -> DTO -> (constructor) -> ResDTO (0) | 2022.02.07 |
---|---|
RuntimeException 에 대해 알아봅시다 (0) | 2022.02.02 |
Intellij Tip (0) | 2022.01.20 |
JpaRepository + PagingAndSortingRepository + CrudRepository (0) | 2022.01.20 |
SpringBoot(JPA) vs. Django (0) | 2022.01.20 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ssafy합격후기
- SSAFY
- 브왈라
- 싸피
- ssafy후기
- 개발언어추천
- 개발도서추천
- 디즈니얼굴
- 싸피6기
- 깃허브계정2개
- 상업용무료폰트
- 맥과윈도우로깃허브
- 개발자로드맵
- 클린코더
- 폰트
- 개발자책추천
- 임대차3법
- 클린코드
- 개발자도서추천
- 코딩도서
- ssafy결과
- 무료폰트추천
- 개발자커리
- 개발언어순위
- 개발자
- 한글무료폰트추천
- 깃허브계정
- 폰트추천
- intj여자
- ssafy6기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함