전체 보기
🍀

Bean validation 적용(Custom exception 처리)

작성일자
2023/03/17
태그
DIARY_DEVELOP
프로젝트
BeachCombine
책 종류
1 more property

공부한 내용

bean validation 적용

검증 어노테이션
@NotNull: null을 허용하지 않음
@NotBlank: 빈칸 혹은 공백만 있는 경우를 허용 안 함
@Pattern: 정규표현식 (Regex) 적용
@Range: 범위 안의 값이어야 함 (따라서, 1900 ~ 2021의 범위 내만 허용)
dto 단에 위의 어노테이션들을 넣어주었고, dto를 사용하는 부분(controller)에선 @Valid 어노테이션을 넣어주었다.
public class NearBeachRequest { @NotNull private Long beachId; @NotNull @Range(min = -90, max = 90) private String lat; @NotNull @Range(min = -180, max = 180) private String lng; }
Java
복사
public ResponseEntity<Void> verifyNearBeach(@PathVariable("beachId") Long beachId, @Valid NearBeachRequest dto) {
Java
복사
trace가 찍히는 문제 해결
운영 환경에서 구현이 노출되는 trace는 제공하지 않는 것이 좋다.
아래 코드에서 api의 bean validation 관련 에러 부분을 custom exception handler에 추가해주었다.
@Slf4j @RestControllerAdvice public class CustomExceptionHandler { // 일반 에러 @ExceptionHandler protected ResponseEntity<ErrorResponse> handleCustomException(CustomException e) { return ErrorResponse.toResponseEntity(e); } // api의 bean validation 관련 예외 // trace가 길게 떠서 BindException을 해결해주는 코드를 추가해줬다. @ExceptionHandler(BindException.class) protected ResponseEntity<ErrorResponse> handleBindException(BindException e) { FieldError fieldError = e.getFieldError(); if (Objects.isNull(fieldError)) { // 일반적으로는 fieldError가 null이 될 수 없지만, 예외 케이스 처리 용도. return ErrorResponse.toResponseEntity(HttpStatus.BAD_REQUEST); } log.info(fieldError.toString()); return ErrorResponse.toResponseEntity(HttpStatus.BAD_REQUEST, fieldError); } }
Java
복사
원래 trace로 길게 아래처럼 떴는데,
{ "timestamp": "2023-03-17T15:09:12.473+00:00", "status": 400, "error": "Bad Request", "trace": "org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors\nField error in object 'memberUpdateRequest' on field 'nickname': rejected value [안녕fasㅇㅇ]; codes [Pattern.memberUpdateRequest.nickname,Pattern.nickname,Pattern.java.lang.String,Pattern]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [memberUpdateRequest.nickname,nickname]; arguments []; default message [nickname],[Ljavax.validation.constraints.Pattern$Flag;@23e15ece,^(?=.*[a-z0-9-])[a-z0-9-]{2,16}$]; default message [닉네임은 2자 이상 16자 이하, 영어 또는 숫자 또는 한글로 구성되어야 합니다]\r\n\tat org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgumen
Java
복사
아래처럼 뜨게 해결되었다.

하루 정리

TIL 작성하기
싸강 듣기!!!!!!!!!!!!! 2주차
CS
스터디 추가 사항 공지
내 파트 공부한 내용 정리해서 PR 올리기
BeachCombine
CICD 오작동 해결
Bean validation 코리, trace 노출 문제 해결
스터디 규칙을 전부 정했다. 리드미에 예쁘게 정리해두었다. 얼떨결에 스터디장이 된 거 같은데, 스터디가 아무쪼록 잘 흘러갔으면 좋겠단 욕심에 열심히 규칙을 정했다.
어제 해결 못했던 CICD 오작동 문제를 해결했고!!!!!!!(정말 너무너무너무너무*100 기쁘다,,, 이 맛에 개발한다,,, 배포는 정말 안될 땐 답답하지만, 해결하고 나면 말도 안되게 기쁘단 장점이 있다. 배포의 매력에 점점 빠지고 있는 요즘이다.)
팀원분께서 담당하신 bean validation 적용 이슈에서, trace가 노출되는 문제를 해결하는데에 도움을 드렸다. 이것도 매우 뿌듯하당. 길게 뜨는 trace에 bindException이 있다는 걸 발견해서 해당 에러를 처리하는 코드를 전달드려 문제를 해결했다.