본문 바로가기

항해99

항해99 19일차 TIL1 - 메시지 바디에 조금 더 자세한 정보를 넣고 싶어요.

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 가 그 해답이 될 수 있을 것 같습니다.