안녕하세요, Brad입니다. 오늘 공부한 내용 정리해볼게요.
왜
SecurityRestControllerAdvice
의 에러를SecurityControllerAdvice
가 자꾸 가져갈까요..?어제 제가 의문을 가졌던 부분이고 결국 해결하지 못하고.. 접어두었습니다.
그런데 너무 찝찝한 것입니다. 이때 임시방편으로 해결한 것은 따로 패키지를 분리해서 그 패키지에 발생한 에러에 대해서 advice가 처리할 수 있도록 했습니다. 기존에는 Annotation(
@Controller
,@RestController
)로 사용했었거든요.그런데 이렇게 패키지로 가둬두면 결국 나중에 다른 패키지에서 컨트롤러를 만들고 거기에서 발생하는 에러들은 공통으로 처리할 수 없게되거나 부가적으로 Advice내에 해당 패키지를 또 적어줘야하는 비효율성이 발생합니다.
그렇기 때문에 이것을 해결하기 위해 검색을 해봤는데요. 그 많은 글 중에 저랑 같은 문제를 겪고 있는 사람을 보았습니다. 일반적으로 많이 사용되는 부분이라고 고려할 때 왠지 모르게 제가 어딘가 잘못하고 있다는 느낌을 받긴 했습니다. 하지만 어디가 잘못이었는지 몰랐죠.
오늘 아침에 알게된 사실인데요. 다른 곳은 하나가 문제가 없었습니다. 어이없게도 저 클래스의 이름이 문제였습니다. 현재
SecurityRestControllerAdvice
를 사용하고 있었는데요. 이렇게 사용하면 Spring에서는SecurityControllerAdvice
을 더 우선시 하더라구요. 하지만 이렇게 사용하지 않고 'Rest'라는 이름이 제일 앞에 두게RestSecurityControllerAdvice
로 이름을 부여하면@RestControllerAdvice
를 우선시 할 수 있었습니다.이것 때문에 어제 시간을 많이 소비하긴 했지만 기존에 사용했던 프로젝트를 그대로 '복사-붙여넣기' 했더라면 발견하지 못할 사실이었습니다. 클래스명의 중요성도 깨닫게 되었습니다.
그래도 여전히.. 왜 이런 차이가 있는건지 궁금하네요!
Controller에서 post 방식 테스트할 때 주의사항
- 이때는 그냥 객체를 넘겨줘서만 되는게 아니라 html form을 만들어서 header와 contentType을 정식으로 만들어서 보내줘야 합니다.
- api 테스트 할때는 객체만 넘겨줘도 괜찮았는데 이건 아마 controller에서는
@RequestBody
을 통해 json데이터를 객체로 바꿔주는 역할을 하지 않아서 그렇지 않을까요?
'TIL' 카테고리의 다른 글
Today's Dev Notes(2019-01-01) (0) | 2019.01.01 |
---|---|
Today's Dev Notes(2018-12-31) (0) | 2018.12.31 |
Todays' Dev Notes(2018-12-29) (0) | 2018.12.30 |
Today's Dev Notes(2018-12-27) (0) | 2018.12.27 |
Today's Dev Notes(2018-12-24) (0) | 2018.12.24 |