처음에 해본 방식
@Around(value = "execution(public * com.sparta.team7_project.presentation.controller.PostController.updatePost(..))")
public Object updatePostException(ProceedingJoinPoint joinPoint)throws Throwable {
try{
Object output = joinPoint.proceed();
return output;
}catch (IllegalArgumentException e) {
return new MessageResponseDto(e.getMessage(), 400);
}
}
이렇게 하면 문제가.. 그 메소드에서 정해준 리턴형식으로 보내줘야한다.
이렇게 이런형식의 Dto면 상관없지만 보내주는것이 entity나 다른형식이라면 해줄수없다.
두번째에 한방식
@Pointcut(value = "execution(public * com.sparta.team7_project.presentation.controller.PostController.updatePost(..))")
public void TestPoine(){}
@AfterThrowing(pointcut = "TestPoine()", throwing= "exception")
public synchronized Object excute(ProceedingJoinPoint joinPoint, Exception exception) throws Throwable{
try{
Object output = joinPoint.proceed();
return output;
} catch (IllegalArgumentException e){
return new MessageResponseDto(e.getMessage(), 400);
}
}
어.. 처음에 joinPoint없이 했더니 @AfterThrowing가 어떠한 것이 시작했을때인지 찾지못한다..내가 리턴값을 이상한것을 준것 같기도 하고..막상 고치다 보니 결국 첫번째내용이다..
어찌되었든.. 두개다 직접 예외처리를 강제 발생시키는건 가능하나 직접적인 예외처리 Dto를 만들어서 처리하는것은 무리가 있어보인가 한번 내일 튜터님께 여쭤봐야겠다.