반응형
- @RestControllerAdvice : Exception 발생 시 JSON으로 반환받기 위하여 생성합니다.
- @ExceptionHandler: Bean에서 발생하는 에러를 잡아 처리합니다
전역의 예외를 잡긴하되 패키지 단위로 제한 할 수 도 있다.
@RestControllerAdvice("com.example.demo.login.controller")
@RestControllerAdvice(basePackages = "com.spring2.nyong.api")
@RequiredArgsConstructor
@RestControllerAdvice(basePackages = "com.spring2.nyong.api")
public class ExceptionAdvice {
private final ResponseService responseService;
/**
* default Exception
* @author me
* @return CommonResult
* @throws Exception
*/
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
protected CommonResult defaultException(HttpServletRequest request, Exception e) {
return responseService.getFailResult(
HttpStatus.INTERNAL_SERVER_ERROR.value()
, e.getMessage()
);
}
/**
* AccessDeniedException
* @author me
* @return CommonResult
* @throws Exception
*/
@ExceptionHandler({ AccessDeniedException.class })
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public CommonResult unauthorizedException(Exception e) {
return responseService.getFailResult(
HttpStatus.UNAUTHORIZED.value()
, e.getMessage()
);
}
/**
* badRequestException
* @author me
* @return CommonResult
* @throws Exception
*/
@ExceptionHandler({HttpMessageNotReadableException.class, MethodArgumentNotValidException.class, MissingServletRequestParameterException.class, UnsatisfiedServletRequestParameterException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public CommonResult badRequestException(Exception e)throws Exception {
return responseService.getFailResult(
HttpStatus.BAD_REQUEST.value()
, e.getMessage()
);
}
/**
* forbiddenException
* @author me
* @return CommonResult
* @throws Exception
*/
@ExceptionHandler(ForbiddenException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public CommonResult forbiddenException(ForbiddenException e) throws Exception {
return responseService.getFailResult(
HttpStatus.FORBIDDEN.value()
, e.getMessage()
);
}
}
@Service
public class ResponseService {
@Getter
@RequiredArgsConstructor
@AllArgsConstructor
// enum으로 API 요청 결과에 대한 status, message를 정의한다.
public enum CommonResponse {
SUCCESS(200, "SUCCESS",new HashMap<String,Object>()),
FAIL(500, "FAIL :(",new HashMap<String,Object>());
private int status; // http 코드값
private String msg; // message
private Map<String,Object> data;
}
// 단일건 결과를 처리하는 메소드
public <T> SingleResult<T> getSingleResult(T data, int status, String msg) {
SingleResult<T> result = new SingleResult<>();
result.setData(data);
setSuccessResult(result, status, msg);
return result;
}
// 다중건 결과를 처리하는 메소드
public <T> ListResult<T> getListResult(List<T> list, int status, String msg) {
ListResult<T> result = new ListResult<>();
result.setList(list);
setSuccessResult(result, status, msg);
return result;
}
// 성공 결과만 처리하는 메소드
public JsonResult getSuccessResult() { // CommonResult 응답 결과를 알려주는 클래스
JsonResult result = new JsonResult();
result.setData(CommonResponse.SUCCESS.getData());
setSuccessResult(result);
return result;
}
// 실패 결과만 처리하는 메소드
public JsonResult getFailResult(int status, String msg) {
JsonResult result = new JsonResult();
result.setSuccess(false);
result.setStatus(status);
result.setMsg(msg);
result.setData(CommonResponse.FAIL.getData());
return result;
}
// 결과 모델에 API 요청 성공 데이터를 세팅해주는 메소드
private void setSuccessResult(CommonResult result) {
result.setSuccess(true);
result.setStatus(CommonResponse.SUCCESS.getStatus());
result.setMsg(CommonResponse.SUCCESS.getMsg());
}
// 결과 모델에 API 요청 성공 데이터를 세팅해주는 메소드
private void setSuccessResult(CommonResult result, int status, String msg) {
result.setSuccess(true);
result.setStatus(status);
result.setMsg(msg);
}
흠 코드 맘에안듬
반응형
'자바' 카테고리의 다른 글
API 문서 자동화 - Swagger (0) | 2022.08.19 |
---|---|
java DTO,VO List 정렬 (0) | 2022.08.19 |
자바 dto,vo 리스트 정렬 list sort (0) | 2022.04.21 |
string을 VO로 변환, json을 VO로 변환 (0) | 2022.01.26 |
자바 스택/리스트 (0) | 2020.06.24 |
댓글