본문 바로가기
study

[JSCODE] 유효성 검사, 예외처리 및 API 문서 작성

by 당코 2023. 5. 14.

유효성 검사, 예외처리

 

게시글 작성 기능

  • 게시글 제목, 내용은 필수적으로 포함해야 한다.
  • 제목은 1글자 이상 15글자 이하여야 한다.
  • 내용은 1글자 이상 1000글자 이하여야 한다.
  • 제목은 공백으로만 이루어질 수는 없다.\   

특정 게시글 조회 기능

  • 게시글의 id(PK, primary key)로 특정 게시글을 조회했을 때, 존재하지 않는 게시글일 경우 에러 메시지로 응답하기

특정 게시글 수정 기능

  • 게시글 작성할 때의 유효성 검사 조건과 동일하게 가져가야 한다.

특정 게시글 삭제 기능

  • 게시글의 id(PK, primary key)로 특정 게시글을 삭제하기 위해 조회했을 때, 존재하지 않는 게시글일 경우 에러 메시지로 응답하기

게시글 검색 기능

  • 검색 키워드는 공백을 제외한 1글자 이상이어야 한다.

 

위와 같은 기능 별로 각각 예외처리를 해주어야 했다.

requestDTO에 @NotBlank 같은 검증 어노테이션을 사용하였고 컨트롤러에서 @Valid로 검증하는 방식을 사용했다.

@Valid를 통해 예외가 발생될 경우 MethodArgumentNotValidException이 터지게 되어 이 예외를 처리할 수 있는 핸들러를 @RestControllerAdvice를 사용한 handlerController에 만들어 주었다.

@ExceptionHandler(MethodArgumentNotValidException.class)
protected ResponseEntity<FieldExceptionResponse> handleValidationException(MethodArgumentNotValidException ex){
     FieldExceptionResponse response = FieldExceptionResponse.from(ErrorCode.INVALID_INPUT_EXCEPTION, ex);
     return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
}

 

하지만 keyword가 query parameter로 들어올 때는 위와 같은 방식으로 검증할 수 없었다.

컨트롤러의 파라미터 자체에 어노테이션을 붙이고 클래스 레벨에 @Validated를 붙여 검증을 하였다.

 

@Validated
public class BoardController{
 
     public ResponseEntity<List<BoardResponse>> boardListByKeyword(@NotBlank @RequestParam String keyword){
            List<BoardResponse> response = boardService.findBoardByKeyword(keyword);
            return ResponseEntity.ok(response);
     }
 }

 

API 문서 작성

 

swagger를 이용하여 API 문서를 작성해 보았다.

  • @ApiOperation = Method 설명
  • @ApiImplicitParam = Request Parameter 설명
  • @ApiResponse = Reponse 설명
  • @ApiParam = DTO field 설명
  • @ApiModelProperty = DTO 예제 설명
  • @ApiIgnore = Swagger UI 상 무시

swagger에서 지원하는 어노테이션을 사용하여 API에 대한 정보를 나타내었다.

 

어려웠던 점, 개선할 점

예외처리에 관한 부분은 한번 큰 구조를 잡아두고 추가로 필요한 예외가 생길 때마다 하나씩 추가하는 방식으로 하다 보니 비교적 쉽게 할 수 있었다.

하지만 swagger를 이용하여 API문서를 작성해 보는 것은 처음이었기 때문에 신경 써야 될 부분이 많았다.

다른 사람들이 작성한 API문서를 보면서 내가 부족한 것이 무엇이고 더 추가해야 할 것들을 배워봐야겠다.