Search

24. 스프링부트 포토그램 인증 회원가입 공통 응답 DTO 만들기

포토그램 인증 구현하기

회원가입 구현

공통 응답DTO를 만들거다
저번에 핸들러 관련해서 맵으로 리턴하게 만들면서 “유효성 검사에 실패함” 이라는 메세지는 띄우질 못했다.
메세지를 같이 띄우고 싶은데 map타입이라 메세지를 못던진다.
“유효성 검사 실패함” 이라는 메세지와 오류를 담은 errorMap를 동시에 띄워주고 싶다.
web > dto 에 CMRespDto.java 생성
(auth 패키지 안에 생성하면 안되고 dto 패키지 안에 생성해야한다)
CMRespDto.java
package com.cos.photogramstart.web.dto; import java.util.Map; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @AllArgsConstructor //모든 필드 값을 파라미터로 받는 생성자를 만들어줌 @NoArgsConstructor //파라미터가 없는 기본 생성자를 생성 @Data //getter, setter public class CMRespDto { private String message; private Map<String, String> errorMap; }
Java
복사
ControllerExceptionHandler.java에서 리턴타입을 map에서 CMRespDto 변경하면서 리턴도 같이 변경
@ExceptionHandler(CustomValidationException.class) public CMRespDto validationException(CustomValidationException e) { return new CMRespDto(e.getMessage() , e.getErrorMap()); }
Java
복사
postman으로 해서 어떻게 리턴되는지 보면
사이트에서 진행해도
요렇게 리턴이 된다.
어떤걸 응답할때 항상 CMRespDto로 공통으로 쓸건데 다른데서는 긴 데이터로 응답할 수 도있다.
사용자 정보를 줘 하면 User를 사용해야하는데 그럼 해당 파일에도 User를 임포트해서 선언 해줘야한다. private User user; 이렇게.
에러를 리턴할때는 message, errorMap만 사용하면 되는데 user 데이터를 리턴해달라 할때는 errorMap은 필요가 없다.
그래서 제네릭을 사용해줄거다.
제네릭을 추가해주면서 성공, 실패에 관련된 코드도 추가해주자
package com.cos.photogramstart.web.dto; import java.util.Map; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @AllArgsConstructor //모든 필드 값을 파라미터로 받는 생성자를 만들어줌 @NoArgsConstructor //파라미터가 없는 기본 생성자를 생성 @Data //getter, setter public class CMRespDto<T> { private int code; //1(성공), -1(실패) private String message; private T data; }
Java
복사
ControllerExceptionHandler.java
@ExceptionHandler(CustomValidationException.class) public CMRespDto <Map<String,String>>validationException(CustomValidationException e) { return new CMRespDto(-1, e.getMessage(), e.getErrorMap()); }
Java
복사
제네릭 추가해주면서 CMRespDto <Map<String,String>> 로 변경해주고 return 에도 에러코드 추가해주자.
포스트맨에서 다시 보내보면
왜 이렇게 만들었냐면
만약에 스트링으로 리턴하고 싶으면
제네릭 타입을 스트링으로 하면 된다.
이렇게 리턴할 수 있다.
CMRespDto는 전역dto로 쓸거라서 제네릭을 선언한거다.
혹시 제네릭타입에 뭘 넣을지 모르겠으면 <?>으로 진행해도 된다. 충분히 추론이 가능.
@ExceptionHandler(CustomValidationException.class) public CMRespDto <?> validationException(CustomValidationException e) { return new CMRespDto<Map<String,String>>(-1, e.getMessage(), e.getErrorMap()); }
Java
복사

*참고