본문 바로가기
Spring & Spring Boot

Springboot - ResponseEntity란?

by 지민재 2023. 2. 15.
반응형
SMALL

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);

	}

 

결과 

댓글