ResponseEntity란?
Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다. 이것은 응답자체의 독립된 값이나 표현형태로, 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스이다.
따라서 HttpStatus, HttpHeaders, HttpBody를 포함한다. H HttpEnityt<T>를 상속받으며, RestTemplate(서버와 서버간 통신을 쉽게해줌) 및 @Controller메서드에 사용하고 있다.
Response header : 웹서버가 웹브라우저에 응답하는 메시지
Reponse body : 데이터 값
ResponseEntity 사용법
String 내부에서 친절하게 ResponseEntity 객체가 구현이 되어있다. 생성자에 status 값만 넣거나, body에만 넣어도 ResponseEntity 의 나머지 값이 null 로 들어간다.
public class ResponseEntity<T> extends HttpEntity<T> {
private final Object status;
/**
* 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);
}
/**
* Create a {@code ResponseEntity} with a body, headers, and a raw status code.
* @param body the entity body
* @param headers the entity headers
* @param rawStatus the status code value
* @since 5.3.2
*/
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, int rawStatus) {
this(body, headers, (Object) rawStatus);
}
/**
* Private constructor.
*/
private ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, Object status) {
super(body, headers);
Assert.notNull(status, "HttpStatus must not be null");
this.status = status;
}
}
사용법
DTO 생성
package mj_crossShot.common;
import lombok.Data;
@Data
public class Message {
private StatusEnum status;
private String message;
private Object data;
public Message() {
this.status = StatusEnum.BAD_REQUEST;
this.data = null;
this.message = null;
}
}
enum타입의 StatusEnum 클래스
package mj_crossShot.common;
public enum StatusEnum {
OK(200, "OK"), BAD_REQUEST(400, "BAD_REQUEST"),
NOT_FOUND(404, "NOT_FOUND"),
INTERNAL_SERER_ERROR(500, "INTERNAL_SERVER_ERROR");
int statusCode;
String code;
StatusEnum(int statusCode, String code) {
this.statusCode = statusCode;
this.code = code;
}
}
예시
package mj_crossShot.controller.boards;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import mj_crossShot.common.Message;
import mj_crossShot.common.StatusEnum;
import mj_crossShot.vo.boardsDto.BoardDto;
/**
* 게시판 컨트롤러
*
* @author 지민재
*/
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("board/")
public class BoardController {
private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
/**
* 게시판 리스트
*
* @param boardDto
* @return ResponseEntity(메세지 , 상태코드)
*/
@GetMapping("boardList")
public ResponseEntity<Message> BoardList(@RequestBody BoardDto boardDto) {
Message message = new Message();
HttpHeaders headers = new HttpHeaders();
logger.info("BoardController/boardList 진입");
try {
// (서비스.메서드);
message.setStatus(StatusEnum.OK);
message.setMessage("boardList 성공!!");
message.setData(boardDto);
} catch (Exception e) {
logger.error("BoardController/boardList " + e.getMessage(), e);
}
return new ResponseEntity<Message>(message, headers, HttpStatus.OK);
}
/**
* 게시판 등록
*
* @param boardDto
* @param session
* @param request
* @return ResponseEntity(메세지 , 상태코드)
*/
@PostMapping("boardSave")
public ResponseEntity<Message> BoardSave(@RequestBody BoardDto boardDto, HttpSession session,
HttpServletRequest request) {
Message message = new Message();
HttpHeaders headers = new HttpHeaders();
logger.info("BoardController/boardSave 진입");
try {
// (서비스.메서드);
message.setStatus(StatusEnum.OK);
message.setMessage("boardSave 성공!!");
message.setData(boardDto);
} catch (Exception e) {
logger.error("BoardController/boardSave " + e.getMessage(), e);
}
return new ResponseEntity<Message>(message, headers, HttpStatus.OK);
}
/**
* 게시판 수정
*
* @param boardDto
* @param session
* @param request
* @return ResponseEntity(메세지 , 상태코드)
*/
@PutMapping("boardUpdate")
public ResponseEntity<Message> BoardUpdate(@RequestBody BoardDto boardDto, HttpSession session,
HttpServletRequest request) {
Message message = new Message();
HttpHeaders headers = new HttpHeaders();
logger.info("BoardController/boardUpdate 진입");
try {
// (서비스.메서드);
message.setStatus(StatusEnum.OK);
message.setMessage("boardUpdate 성공!!");
message.setData(boardDto);
} catch (Exception e) {
logger.info("BoardController/boardUpdate " + e.getMessage(), e);
}
return new ResponseEntity<Message>(message, headers, HttpStatus.OK);
}
/**
* 게시판 삭제
*
* @param boardDto
* @param session
* @param request
* @return ResponseEntity(메세지 , 상태코드)
*/
@DeleteMapping("boardDelete")
public ResponseEntity<Message> BoardDelete(@RequestBody BoardDto boardDto, HttpSession session,
HttpServletRequest request) {
Message message = new Message();
HttpHeaders headers = new HttpHeaders();
logger.info("BoardController/boardDelete 진입");
try {
// (서비스.메서드);
message.setStatus(StatusEnum.OK);
message.setMessage("boardDelete 성공!!");
message.setData(boardDto);
} catch (Exception e) {
logger.error("BoardController/boardDelete " + e.getMessage(), e);
}
return new ResponseEntity<Message>(message, headers, HttpStatus.OK);
}
}
실제 실행 Controller
@ResponseBody
@RequestMapping(value = "join", method = RequestMethod.POST)
public ResponseEntity<Message> join(@RequestBody Member member) {
Message message = new Message();
HttpHeaders headers= new HttpHeaders();
logger.info("member : " + member);
// 회원등록
try {
memberservice.memberJoin(member);
message.setStatus(StatusEnum.OK);
message.setMessage("성공 코드");
message.setData(member);
} catch (Exception e) {
logger.error("join controller :" + e.getMessage(), e);
}
return new ResponseEntity<Message>(message, headers, HttpStatus.OK);
}
결과
'Spring & Spring Boot' 카테고리의 다른 글
Netty (4) | 2023.11.21 |
---|---|
Springboot - 생성자 주입 , 필드 주입 방식, 수정자 주입 방식의 차이점 & 생성자 주입 방식을 권하는 이유? (0) | 2023.02.20 |
Springboot - Lombok 라이브러리에서 자주 사용하는 애노테이션 (0) | 2023.02.14 |
Springboot @Scheduled 애노테이션 쓰레드 문제 (0) | 2023.01.19 |
Springboot & Vue3.js - 쿠키 , 세션을 이용한 로그인 처리 (1) | 2023.01.12 |
댓글