문제점
해결방안
구현
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
public class ResponseDto{
//data의 클래스가 정해지지 않았기에 모든 것을 담을 수 있는 Object로 선언
private Object data;
//내부상태코드
private int statusCode;
//상세 메세지
private String message;
public ResponseDto(Object data,int statusCode,String message){
this.data=data;
this.statusCode=statusCode;
this.message=message;
}
}
import com.ssafy.wannago.exception.CustomException;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {return true;}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType,
MediaType selectedContentType, Class selectedConverterType,
ServerHttpRequest request,ServerHttpResponse response) {
HttpServletResponse servletResponse =
((ServletServerHttpResponse) response).getServletResponse();
int status = servletResponse.getStatus();
if(body==null) {
return new ResponseDto("empty",status,"Request was successful");
}
if(body instanceof ResourceRegion || body instanceof Resource) {
return body;
}
if(body instanceof CustomException) {
CustomException Ce=(CustomException)body;
log.debug("사용자 실패 처리");
return new ResponseDto("empty",status,Ce.getMsg());
}
if(body instanceof Exception){
Exception e=(Exception)body;
log.debug("내부 실패 처리");
return new ResponseDto("empty",status,e.getMessage());
}
log.debug("성공된 반환 처리");
return new ResponseDto(body,status,"Request was successful");
}
}
data,statusCode,message가 모든 api요청에 대하여 일관된 형태로 보내지고 있다.