[STS] ResponseEntity

안아현·2024년 8월 26일

Spring

목록 보기
9/13

Response Entity

  1. 개념
    Http 요청에 대한 결과 데이터와 상태코드를 포함하는 데이터 구조이다.

  2. 구성 1; Response Body
    클라이언트의 Http request에 대한 응답(response)의 핵심이다. 클라이언트가 요청한 자원이나 처리 결과를 담고 있다. Response Body는 JSON, XML 등 다양한 데이터 형식이 지원된다. 단, 이 형식은 응답 헤더에서 정의된 형식과 정보를 기반으로 해야 한다.

  3. 구성 2; Response Header
    Response Body의 데이터 형식, 크기, 인코딩 방식 등 추가 정보를 제공한다. 클라이언트는 Response Header 정보를 기반으로 응답을 처리할 수 있다.

Response Body - Response Header

  • content-type: 헤더가 정의한 데이터 형식에 따라 바디가 구성된다. 사용자는 헤더 정보를 기반으로 본문을 파징하여 처리할 수 있다.
  • content-encoding: 헤더가 인코딩 방식을 정의하면, 사용자는 해당 방식에 따라 바디의 데이터를 인코딩해야 한다.

  1. 구성 3; Status Code
    404, 505와 같은 코드가 Status Code에 해당한다. 이러한 코드는 대부분 서버에서 자동으로 처리한다. 그럼에도 Response Entity가 Status Code를 포함하는 이유는 보다 세밀한 제어를 위해서이다.
    가령, 서버상으로는 문제가 없는 요청이지만 기능상 성공으로 처리되면 안되는 경우 Status Code를 사용하여 세밀한 제어가 가능하다. 뿐만 아니라 특정 에러에 맞춤형 응답을 반환할 때 Response Entity를 사용하기도 한다.

  2. 사용예시

@GetMapping(value="/list.do", produces= {
			MediaType.APPLICATION_XML_VALUE,
			MediaType.APPLICATION_JSON_UTF8_VALUE
	})
	public ResponseEntity<Map<String, Object>> list(PageObject po, Long no) {
		log.info("list()------------");
		List<BoardReplyVO> list=service.list(po, no);
		log.info("page: "+po.getPage()+", no: "+no);
		/*ajax로 댓글리스트를 호출한 곳으로 list와 po(for pagination)를 넘기기 위해
        map으로 list와 po를 묶어준다. */
		Map<String, Object> map=new HashMap<String, Object>();
		map.put("list", list);
		map.put("po", po);
		log.info("map: "+map);
		
		//responseEntity: 통신의 성공 여부를 임의로 전달한다.
		ResponseEntity<Map<String, Object>> re=new ResponseEntity<>(map, HttpStatus.OK);
		
		return re;
	}

필자의 코드 중 일부로, 일반게시판 댓글 Controller의 list() 부분이다.
BoardReplyService - BoardReplyMapper - XML을 거쳐 댓글 목록을 가져오면, 그 리스트를 페이지 처리를 위한 page object와 함께 js로 넘긴다. 이때 map으로 두 객체를 하나로 묶어서 넘긴다.
추가로 통신 코드를 세밀히 제어하기 위해 Response Entity에 Response Body로 map과 통신 코드를 두고, 이를 return하는 방식이다.

profile
programming

0개의 댓글