인프런 커뮤니티 질문&답변

현이님의 프로필 이미지
현이

작성한 질문수

코드로 배우는 React with 스프링부트 API서버

서비스계층과 컨트롤러(3)-상품수정

Product 컨트롤러 api 결과값 리턴 질문

작성

·

97

·

수정됨

0

상품 등록이나 수정을 하고나서

return Map.of("result", "Success")

이렇게 리턴해주셨는데

실무에서 이런 방식을 많이 사용하나요 아니면 교육목적이기 때문에 조금 러프하게 하신건가요??

이번 강의를 보고 실무와 가깝게 프로젝트를 진행하고 싶은데 이렇게 Map에 간단하게 리턴할지 아니면 api마다 매번

ResponseEntity에 Http Status Code 담아 리턴해야 할지 기준을 모르겠습니다.

제 목적에 맞게 하려면 어떤 방식으로 api 결과를 리턴해줘야 할까요??

답변 1

1

구멍가게코딩단님의 프로필 이미지
구멍가게코딩단
지식공유자

말씀하신대로 예제의 성격이 강하다보니 '성공/실패'와 같은 단순 결과를 반환했습니다.

예제에서는 DML(insert, update, delete)에 대해서는 단순 결과를 반환하는 방식을 이용했지만

 

API서버라면 등록/수정의 경우에는 현재 데이터베이스에 있는 상태를 그대로 반환하는게 낫다고 생각합니다. 등록의 경우 식별키와 날짜 등을 포함하고, 수정의 경우 수정된 상태를 반환하는 방식입니다.

 

좀 엄격하게 API 서버를 제작하고 싶으시다면 @RestControllerAdvice와 예외 설계를 적절히 섞어서 사용하셔야 합니다. 아래의 코드는 제가 예제로 사용하는 코드의 일부입니다.

 

public enum MemberExceptions {

  NOT_FOUND("NOT_FOUND", 404),
  DUPLICATE("DUPLICATE", 409),
  INVALID("INVALID", 400),

  BAD_CREDENTIALS("BAD_CREDENTIALS", 401);


  private MemberTaskException memberTaskException;

  MemberExceptions(String msg, int code) {
    memberTaskException = new MemberTaskException(msg, code);
  }

  public MemberTaskException get() {
    return memberTaskException;
  }

}

@RestControllerAdvice
@Log4j2
public class TokenControllerAdvice {

  @ExceptionHandler(MemberTaskException.class)
  public ResponseEntity<Map<String, String>> handleTaskException(MemberTaskException ex) {

    log.error(ex.getMessage());

    String msg = ex.getMsg();
    int status = ex.getCode();

    Map<String, String> map = Map.of("error", msg);


    return ResponseEntity.status(status).body(map);
  }

 

현이님의 프로필 이미지
현이
질문자

빠르고 좋은 답변 감사합니다!!

현이님의 프로필 이미지
현이

작성한 질문수

질문하기