안녕하세요. 오랫만입니다. 토이 프로젝트를 하다가 controller에서 mapping하는 로직이 있었습니다. 예를 들어, bookController에 있는 addBook 메서드를 보겠습니다. BookRegInfo 객체를 받아서, Book 객체에 넘겨 받은 객체에 대한 정보를 넣습니다. 그리고 이 객체를 service 단으로 넘겨 버립니다. 사실 이게 끝이긴 합니다. 그런데, 만약에 book의 필드가 많아지면 어떨까요? 컨트롤러 안의 addBook에서 mapping을 하는 로직을 어떻게 뺄지 고민을 했어요. 혹은, 이러한 일련의 작업들을 쉽게 해 주는 것이 없나? 도 찾아보았어요. 찾아보니 mapstruct가 있었는데요. 이번 시간에는 이 친구에 대해 간단하게 알아 보겠습니다. mapstruct와 map..
웹 검색 결과
RequestBody에 대해서 Validation이 실패했을 때 custom한 error를 떨어트리는 것을 하였습니다. 그런데, 쿼리 파라미터라던지, path variable에 대해서 Validation을 처리하지는 못합니다. 이것을 처리하기 위해서는 ConstrainViolationException을 컨트롤러 advice에서 처리해 주어야 합니다. ContraintViolationException이 떨어졌을 때, custom message를 어떻게 떨굴지 보도록 하겠습니다. 먼저, e에 contraintViolations가 있습니다. HashSet이 있는데요. 이 안에 ConstraintViolationImple가 들어가 있음을 볼 수 있어요. HashSet 내부에 있는 키들을 모두 순회해서 값들을 가..
안녕하세요. 토이 프로젝트를 진행하다가 jwtFilter에서 예외가 발생했을 때, ControllerAdvice로 처리를 했습니다. 그랬더니 500이 떨어졌는데요. 서버에서의 로그를 확인해 보니 jwt의 사용 기한이 경과되었다와 같은 jwt exception이 그대로 떨어졌습니다. 저는, jwt token이 유효하지 않다면, fe단에서 왜 유효하지 않은지 알 수 있게 custom한 메세지와 응답 코드를 뿌려주려고 했습니다. 어떤 식으로 적용을 했는지 간단하게 소개해 보도록 하겠습니다. 공식 문서를 보면 Spring Security에서 Filter에 대한 개략적인 그림이 있어요. 이 그림과 서버에 나타난 로그를 보고 어떻게 코드를 바꿔야 할 지 고민해 보겠습니다. 먼저 GET /borrow는 인증이 되어야..
저번 시간에 Valid 어노테이션을 이용해서, json 입력에 대해서 검증하는 처리를 했어요. 예를 들자면, regLevel이 1 이상이여야 하고, itemName은 공백이면 안되는 조건을 걸면, itemName 필드가 공백인 것이 들어오면 400을 떨궈주게 됩니다. 이 글을 보시면 대략적으로 감이 오실 거 같아요. 그런데 제 토이 프로젝트에서, validation 처리야 했다고 쳐도, 예외에 대해서 ResponseEntity를 controller에서 만들어 버렸어요. 최근에 리팩토링 한 부분이 이것을 ControllerAdvice로 뺀 것이였는데요. 그러면서 몇 개의 api에 대해서 에러 포맷도 custom 하게 처리하게 되었습니다. 이 부분은 프로젝트 변경 내역에서 확인하실 수 있습니다. 이전에 했던..
꽤 최근에 토이 프로젝트의 controller 코드가 조금 단순화 되었음을 볼 수 있습니다. 아직 리팩토링이 다 끝났다고 말 하기도 그렇지만. 사실 어제 리뷰를 받고 valid 어노테이션을 적용한 것이 조금 컸습니다. 변경 내역은 이 링크에서 보실 수 있습니다. 사실 문제의 발단은 사소한 테스트에서 출발하였습니다. 유저가 중복된 경우에 대해서 왜 내 프로젝트는 500을 떨어트릴까? 예외 처리가 느슨해 보였습니다. 그런데 마침 카톡방에서 리뷰어 분들이 제 프로젝트를 보시고, Bad request 부분을 처리하는 로직이 비대해 보인다면서, Valid 어노테이션을 써 보는 게 어떻겠냐는 조언을 주셨습니다. 먼저 dependencies에 Validation을 추가합니다. pom.xml에는 spring-boot-..
최근댓글