What : 어떤 문제가 있었는지
Try : 시도해본 것들
So : 그래서 뭘 알았는지
이번 포스팅에서 다룰 ResponseEntity 객체를 얘기하기 전에 하루 일과에 대해 조금 얘기해보려고 해요.
오늘은 참 이리저리 바쁘게 움직였네요. 우선 개인 과제를 마무리했습니다.과제는 깃헙에 올려놨습니다! 1주차 과제 - Github
개인 과제를 마무리하고 팀원들과 팀 과제 진행 방향에 대해 의논했는데요.
이번주에 배운 내용 중, 각자 궁금하거나 중요하게 생각하는 부분을 정합니다. 그리고 팀원 모두가 이에 대해 답하는 형식으로 진행하게 되었습니다.
마지막으로 자바스터디 때 성진님께서 공유해준 AI 채팅 사이트도 신기해서 공유하도록 하겠습니다.
WHAT
위 체크 박스 사진은 개인 과제 요구 사항 중 하나인데요.
요구사항에 따르면 게시글 비밀번호 검증에 통과 여부에 따라 응답 결과를 다르게 주어야 합니다.
제가 처음에 짠 코드입니다.
@Deprecated
@Transactional
public BulletinBoardDto update(Long id, BulletinBoardForm boardForm) {
BulletinBoard board = bulletinBoardRepository.findById(id).orElseThrow();
if (isNotSame(boardForm.getPassword(), board.getPassword())) {
return null;
}
board.update(boardForm);
return new BulletinBoardDto(board);
}
아쉬웠던 점은 비밀번호가 일치하지 않을 때 주는 응답 정보였습니다.
null 값을 반환해 주는 건 클라이언트에게 너무 불친절한 것 같다는 생각이 들었습니다.
TRY
조금 더 자세한 응답 결과를 주고 싶다면 ResponseEntity 객체를 활용할 수 있습니다.
참고로 응답 결과에 따라 HTTP 상태 코드도 담아 보낼 수 있습니다.
어쩔 수 없이 코드를 덕지덕지 붙여야될 것 같습니다:)
@Getter
public class Message {
private Boolean success;
private Object data;
public Message(Boolean success, Object data) {
this.success = success;
this.data = data;
}
}
@Transactional
public ResponseEntity<Message> updateV2(Long id, BulletinBoardForm boardForm) {
BulletinBoard board = bulletinBoardRepository.findById(id).orElseThrow();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
if (isNotSame(boardForm.getPassword(), board.getPassword())) {
Message message = new Message(false, null);
return new ResponseEntity<>(message, headers, HttpStatus.UNAUTHORIZED);
}
board.update(boardForm);
Message message = new Message(true, new BulletinBoardDto(board));
return new ResponseEntity<>(message, headers, HttpStatus.OK);
}
기존 코드라면 실패 시 return null 이기 때문에 응답 메시지가 없습니다. 하지만 ResponseEntity 객체를 활용하면
성공 여부와 함께 오른쪽에 보시면 Http 상태코드도 구분하여 전달할 수 있습니다.
성공했을 때는 아래와 같이 응답 결과를 주게 됩니다.

So
항해99 8일차 - TIL RESTful API란 무엇인가? 에서 RESTful API에 대해 알아보았습니다.
그런 REST API로 괜찮은가 47분 짜리 영상을 보고 REST 라는 것이 무엇인지 알게 되었습니다. 그리고 어떻게 하면 REST 규약의 Hateoas를 구현할 수 있을까 고민해보았습니다. ResponseEnitity 가 그 해답이 될 수 있을 것 같습니다.
'항해99' 카테고리의 다른 글
항해99 21일차 TIL1 - 순수 JPA 활용기 - 1 (0) | 2022.12.28 |
---|---|
항해99 20일차 TIL1 - PUT/PATCH 차이, 트랜잭션이란? (0) | 2022.12.28 |
항해99 3주차 WIL - 상속과 인터페이스 (0) | 2022.12.25 |
항해99 18일차 TIL1 - JdbcSQL 사용 중 오류가 발생했어요! (0) | 2022.12.24 |
항해99 17일차 TIL1 - Protected 접근제한자 활용기 (2) | 2022.12.24 |