[Java+SpringBoot+JPA] 기본 CRUD 구현하기 (3)검증 오류 추가

2023. 12. 24. 12:25Pratice/CRUD

반응형

 

 

 

검증(Validation)

올바른 데이터인지 판별하는 것이 목적

전송된 데이터의 유효성을 검사하고, 오류 발생 시 각 레이어에서 적절한 조치를 취할 수 있다.

 


 

🟢 Entity

  검증 오류를 추가하기 위해서는 필드에 nullable=false를 선언하여 null 값이 들어가지 않도록 설정

@Entity
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "product")
@SequenceGenerator(
    name = "product_SEQ",
    sequenceName = "product_SEQ",
    initialValue = 1,
    allocationSize = 1)
public class ProductEntity extends BaseEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "product_SEQ")
  private Integer productId;

  @Column(name = "productName", length = 30, nullable = false)
  private String productName;

  @Column(name = "productPrice", length = 10, nullable = false)
  private Integer productPrice;

}

 

 

 

🟢 DTO

  해당 필드(변수)의 null을 허용하지 않는다는 검증 어노테이션을 활용

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ProductDTO {

  private Integer productId;

  @NotEmpty(message = "상품 이름은 필수 입력입니다.")
  private String productName;

  @NotNull(message = "가격은 필수 입력입니다.")
  @Min(value = 0, message = "가격은 최소 0원 이상이어야 합니다.")
  private Integer productPrice;

  private LocalDateTime reDate;

  private LocalDateTime moDate;

}

 

* 데이터 검증(validation) 시에 필드의 값이나 상태를 체크 방법

종류 설명    
@NotNull null이면 검증 오류를 발생    
@NotEmpty null이 아니고, 크기가 0이 아닌지를 검증 문자열일 경우, 빈 문자열("")이 아닌지를 확인 문자열, 컬렉션, 맵 등의 타입에서 사용
@NotBlank null이 아니고, 빈 문자열이 아니며, 공백 문자가 아닌지를 검증 문자열이 비어있거나 공백만으로 이루어져 있으면 검증 오류를 발생 주로 문자열에 사용

 

💜 유효성 검사(검증오류) 종류 / 표현식

 

[Java] 유효성 검사 (Validation) / 검증 오류 DTO에 작성하는 방법

유효성 검사(Validation) 데이터의 일관성과 정확성을 보장 올바른 데이터인지 판별하는 것이 목적 @Validation 어노테이션으로 선언해서 사용 View에서 DTO로 값을 전달 (Controller) - 설정 DTO에서 값의 유

dalhyehye.tistory.com

 

 

 

🟢 Controller

  @Valid 어노테이션을 사용하여 DTO에 선언된 검증 조건을 적용

  BindingResult 매개변수를 통해 검증 결과를 확인

...
...
...
  //삽입 처리
  @PostMapping("/productinsert")
  public String insertProc (@Valid ProductDTO productDTO, BindingResult bindingResult) throws Exception {

    if(bindingResult.hasErrors()) {
      return "/product/insert";
    } productService.insert(productDTO);

    return "redirect:/productlist";
  }
  
  ...
  ...
  ...
  
    //수정처리
  @PostMapping("/productupdate")
  public String updateProc (@Valid ProductDTO productDTO, BindingResult bindingResult) throws Exception {

    if(bindingResult.hasErrors()) {
      return "/product/update";
    } productService.update(productDTO);

    return "redirect:/productlist";
  }
  
  ...
  ...
  ...

 

 

 

🟢 insert.html

  fields.hasErrors를 통해 검증 결과를 확인하고, 필요에 따라 오류 메시지를 출력

...
...
...

        <div class="mb-3 mt-3">
          <label for="productName">상품명</label>
          <input type="text" class="form-control" id="productName" placeholder="상품명을 입력해주세요." name="productName">
        </div>
        <p class="text-danger" th:if="${#fields.hasErrors('productName')}" th:errors="*{productName}"}></p>
        
        <div class="mb-3 mt-3">
          <label for="productPrice">가격</label>
          <input type="text" class="form-control" id="productPrice" placeholder="가격을 입력해주세요." name="productPrice">
        </div>
        <p class="text-danger" th:if="${#fields.hasErrors('productPrice')}" th:errors="*{productPrice}"></p></p>
        
        
       ...
       ...
       ...

 

 

 

🟢 update.html

  fields.hasErrors를 통해 검증 결과를 확인하고, 필요에 따라 오류 메시지를 출

...
...
...

	<div class="mb-3 mt-3">
          <label for="productName">상품명</label>
          <input type="text" class="form-control" id="productName" name="productName" th:field="*{productName}">
        </div>
        <p class="text-danger" th:if="${#fields.hasErrors('productName')}" th:errors="*{productName}"}></p>
        <div class="mb-3 mt-3">
          <label for="productPrice">가격</label>
          <input type="text" class="form-control" id="productPrice"name="productPrice" th:field="*{productPrice}">
        </div>
        <p class="text-danger" th:if="${#fields.hasErrors('productPrice')}" th:errors="*{productPrice}"></p>
        
        ...
        ...
        ...

 


 

💚 required 속성으로만 유효성(검증) 검사 추가하는 방법

 

 

[Java+SpringBoot+JPA] 기본 CRUD 구현하기 (3-1) required로 유효성 검사

💚 서버 측에서도 검증 수행하는 방법 [Java+SpringBoot+JPA] 기본 CRUD 구현하기 (3)검증 오류 추가 검증(Validation) 올바른 데이터인지 판별하는 것이 목적 전송된 데이터의 유효성을 검사하고, 오류 발

dalhyehye.tistory.com

 

반응형