잘못 기입된 값을 받으면 400(Bad Request)를 반환하도록 ValidationCheck 로직 추가
CreateNromalDto
@NotBlank, @Size 등 Validation을 확인하는 어노테이션 추가
ValidationCheck에서 실패 시 MehthodArgumentNotValidException 발생
package com.portfolio.Dto;
import com.portfolio.entity.NormalBoard;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
/**
* 일반 게시판 생성 DTO
date : 2024.07.26
author : 김만기
====== Annotation description ======
Schema: swagger 문서 작성을 위한 annotation
Validation 관련 Annotation(조건에 부합하지않느다면 MethodArgumentNotValidException 발생)
NotBlank: null, "" 체크
Size: 길이 체크
====== field description ======
title: 게시판 제목
content: 게시판 내용
====== method description ======
toEntity: DTO를 DB에 적재하기 위한 Entity로 변환
====== etc description ======
entity를 사용하고 싶었으나 entity를 사용하면 Swagger의 example Value가 모든 필드를 표기하는 문제가 있어서 DTO를 사용
*/
@Getter
@Setter
public class CreateNormalBoardDto {
@Schema(description = "게시판 제목", example = "게시판 제목")
@NotBlank(message = "제목은 필수 입니다.")
@Size(max = 30, message = "제목은 최대 30자 입니다.")
private String title;
@Schema(description = "게시판 내용", example = "게시판 내용")
@NotBlank(message = "내용은 필수 입니다.")
private String content;
public NormalBoard toEntity() {
return NormalBoard.builder()
.title(title)
.content(content)
.build();
}
}
ControllerExceptionHandler
Controller의 Exceltion을 처리하는 Handler
MehthodArgumentNotValidException만 처리하는 메소드 handleValidationException
package com.portfolio.exception.handler;
import com.portfolio.dto.ApiResultDto;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/*
* 컨트롤러 예외처리 핸들러
* date: 2024-07-29
* author: 김만기
*
* ====== Annotation description ======
* RestControllerAdvice: RestController에서 발생하는 예외를 처리하기 위한 annotation
* ExceptionHandler: 특정 예외를 처리하기 위한 annotation
*
* ====== method description ======
* handleValidationExceptions: @size, @notnull 등에서 발생하는 예외를 처리
* 400 Bad Request로 응답하고, data에는 @size 등에서 지정한 message=''를 담아서 전달
*/
@RestControllerAdvice
public class ControllerExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ApiResultDto<String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
ApiResultDto<String> result = new ApiResultDto<>();
result.setResultCode("400");
result.setResultMessage("Validation Error");
result.setData(ex.getBindingResult().getAllErrors().get(0).getDefaultMessage());
return ResponseEntity.badRequest().body(result);
}
}
프로젝트의 build.gradle
module-normal-board의 build.gralde
// 빌드 시 bootJar로 생성하지않음
bootJar { enabled = false }
// 다른 모듈의 라이브러리 형태가 될 것이기 때문에 jar 형태로 진행
jar { enabled = true }
dependencies {
// common 모듈에 의존
implementation project(":module-common")
implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.4.0'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '3.3.0'
}