통합 ResponseDto로 성공과 실패의 결과값을 담아 Response로 넘겨주고자 한다.
@Getter
@AllArgsConstructor
public class ResponseDto<T>{
private boolean success;
private T data;
private Error error;
public static <T> ResponseDto<T> success(T data) {
return new ResponseDto<>(true, data, null);
}
public static <T> ResponseDto<T> fail(String code, String message) {
return new ResponseDto<>(false, null, new Error(code, message));
}
@Getter
@AllArgsConstructor
static class Error {
private String code;
private String message;
}
}
위처럼 성공시 true와 data로 어떠한 데이터도 담을 수 있게 필드를 선언한다.
실패시 false와 직접작성한 code와 message를 담은 error를 담을 수 있게 필드를 선언한다.
예외처리를 할 때 바로 response에 응답 메세지를 담고 싶은 경우에 사용된다.
자바객체와 JSON사이에 형변환을 위한 ObjectMapper를 사용하기 위해 Jackson라이브러리를 다운받는다.
build.gradle
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
response.setContentType("application/json;charset=UTF-8");
response.getWriter().println(
new ObjectMapper().writeValueAsString(
ResponseDto.fail("BAD_REQUEST", "로그인이 필요합니다.")
)
);
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 401,402 같은 에러코드를 담음