HTTP 응답 메시지 바디(Body, 본문)에 메시지 설정하기(담아 보내기).
HTTP 메시지는 startLine / Header / 공백라인 / Body 부분으로 나누어져 있다.
데이터 전달 방법으로는 다음의 네 가지 방법이 있다.
- HttpServletRequest, Response 객체
- InputStream, OutputStream 이용
- @ResponseBody + 반환 객체
- 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 이 나온다.

modify →

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

'Spring > Boot' 카테고리의 다른 글
| 스프링부트 응답 메시지 보내기 (0) | 2024.09.01 |
|---|---|
| 스프링부트 thymeleaf 정리하기 (0) | 2024.08.22 |
| 스프링부트 RESTful Api (0) | 2024.08.15 |