본문 바로가기
Spring/Boot

스프링부트 ResponseEntity<T>

by dyddyd0 2024. 8. 17.

HTTP 응답 메시지 바디(Body, 본문)에 메시지 설정하기(담아 보내기).

HTTP 메시지는 startLine / Header / 공백라인 / Body 부분으로 나누어져 있다.

 

데이터 전달 방법으로는 다음의 네 가지 방법이 있다.

  1. HttpServletRequest, Response 객체
  2. InputStream, OutputStream 이용
  3. @ResponseBody + 반환 객체
  4. ResponseEntity <T>

1번 , 2번 두 방식 은 스트림 사용 방식, 스트림: 바이트코드 → 인코딩 설정 필요함.

출처 : https://jddng.tistory.com/219

 

 

여기서는 4번 방식을 정리할 예정.


가입된 모든 멤버 목록을 조회하는 예시이다.

 

다음과 같이 members에 GetMapping 또는 PostMapping 해주어 사용 가능 하다.

@GetMapping("/members")
    public ResponseEntity<?> findAll() {
        ResponseDto<MemberDto> responseDto = new ResponseDto<>();
        try {
            List<MemberDto> memberDtoList = memberService.findAll();
            responseDto.setStatusCode(HttpStatus.OK.value()); // http 성공을 의미하는 200번대, OK의 상태코드 넣기
            responseDto.setStatusMessage("OK"); // OK 메시지 넣기
            responseDto.setDataList(memberDtoList);
            
            return ResponseEntity.ok(responseDto);
        } catch (Exception e){
            responseDto.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value()); // 내부서버 오류 상태코드 넣기
            responseDto.setStatusMessage(e.getMessage()); // Exception 에러메시지 넣기
            
            return ResponseEntity.internalServerError().body(responseDto);
        }
    }

코드를 요약하면,

ResponseEntity에

상태코드, 상태메시지, 데이터(모든 멤버, memberDtoList)를 담은 ResponseDto를 넣어 반환한다.

 

 

ResponseDto에서 전송할 데이터(데이터 리스트), 상태 코드, 상태 메시지 등의 옵션을 정의한다.

(Restful 한 api를 만들기 위해 정형화시키는 것)

@Getter
@Setter
public class ResponseDto<T> {
    private T data;
    private List<T> dataList;
    private int statusCode;
    private String statusMessage;
}

 

ResponseEntity 객체를 이용하여 규약에 맞는 Http Response를 반환하기 위함.

 

ResponseDto 객체에 데이터 리스트, 상태 코드, 상태 메시지를 넣어서 ResponseEntity에 넣어 전달해 주는 것이다.

x-www-form-urlencoded 형태는 @ModelAttribute 방식, @RequsetParam으로 데이터 받았었음.

전송되는 데이터가 json형태면, @RequestBody를 사용해야 된다.

 

 

delete →
@DeleteMapping("/members/remove/{id}")
    public ResponseEntity<?> deleteById(@PathVariable("id") int id){
        ResponseDto<MemberDto> responseDto = new ResponseDto<>();
        try{
            memberService.deleteById(id);

            responseDto.setStatusCode(HttpStatus.NO_CONTENT.value());
            responseDto.setStatusMessage("NO_CONTENT");

            return ResponseEntity.ok(responseDto); // <- 포스트맨에서 보이는 ok 의 이유
        } catch (Exception e){
            responseDto.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
            responseDto.setStatusMessage(e.getMessage());

            return ResponseEntity.internalServerError().body(responseDto);
        }
    }

삭제 메서드는 전송할 데이터가 없어서 setData를 해주지 않았다.

따라서 data, dataList를 조회하면 null 이 나온다.

delete 응답

 

 

modify →

modify 코드

json 형태로 날려주면 @RequsetBody 어노테이션으로도 받아줄 수 있음.

modify 응답

 

 

반응형

'Spring > Boot' 카테고리의 다른 글

스프링부트 응답 메시지 보내기  (0) 2024.09.01
스프링부트 thymeleaf 정리하기  (0) 2024.08.22
스프링부트 RESTful Api  (0) 2024.08.15