본문 바로가기

Back-end(Spring Framework)/필기일지

231226 [Back-end] server단 에서의 Form 검증(@어노테이션, Validation interface)

[23.12.26]  95일차

 

<<진도>>

[Back-end] Spring Framework

form 검증(@어노테이션, validation)

 

 

 

1. hibernate validate

Maven 의존성에 추가 pom.xml

https://mvnrepository.com/artifact/org.hibernate/hibernate-validator/6.0.23.Final

https://mvnrepository.com/artifact/javax.validation/validation-api/2.0.1.Final

 

spring.io validation

https://spring.io/guides/gs/validating-form-input/

 

Getting Started | Validating Form Input

The application involves validating a user’s name and age, so you first need to create a class that backs the form used to create a person. The following listing (from src/main/java/com/example/validatingforminput/PersonForm.java) shows how to do so: pac

spring.io

 

(Spring Boot 기준)

PersonForm을 만들고

package com.example.validatingforminput;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

public class PersonForm {

	@NotNull
	@Size(min=2, max=30)
	private String name;

	@NotNull
	@Min(18)
	private Integer age;

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String toString() {
		return "Person(Name: " + this.name + ", Age: " + this.age + ")";
	}
}

 

 

 

controller에서 적용

에러가 있다면, if문으로 검증처리

 

String name에 대해 비어있지 않음검증 설정 @Notempty( null 체크)

binding된 item의 결과가 에러가 있다면 => 특정페이지 연결 (+ DB에 저장되지 않음)

 

사용자에게 표시필요

(form:form)라이브러리 활용

<form:error>로 간편하게 가능

 

@NotEmpty

Error문구

 

@Size(min=1, max=5) 

기본 error문구 [size는 min/max를 모두 포함]

 

 

.error cssclass속성과

어노테이션 속성의 message=""로 문구지정이가능

 

**cf) Integer의 경우(기본값이 null인 변수형의 경우) @NotEmpty가 아닌 @NotNull을 써야함 / 또한 @Size가 아닌 @Min(value=""), @Max(value="")를 써야함

 

addForm

 

 


2. Validator interface를 상속받아 활용하는 방법 (설정파일)

WEB-INF 내 설정파일 생성

ver3.validation

 

 

Validator 인터페이스를 상속한 클래스를 구현하여 Controller에 DI

lombok의

@RequiredArgsConstructor

: final field와 @NonNull인 field들로만 인수로 받는 생성자 생성 (DI)

그 외의 필드는 없음

 

 

+ Controller에 추가`

 

 

root-context.xml에 Validator에 대한 메시지 설정파일 빈생성 설정 지정

 

form에 들어오는 class형태가 Item인지 클래스 비교 후
(특정 errors, view의 name, message.properties의 설정한 특정 에러코드, 에러코드가 없을 때 노출할 기본 값)
properties에 해당 에러코드가 없으면 (# - 주석처리)

 

 

 

 


 

 

 

 

** 사실 위의 예시들은 모두 server(back)단에서 처리되는 form 검증 절차이다.

 

**사실 server단에서 모든 client에서 오는 검증요청을 처리하는 것은 매우 비효율적

=> JavaScript로 client 단 에서 보통 먼저 처리를 하고,

 네트워크를 통해오는 요청(손실이 발생할 수 있으므로)을 최종적으로 다시 검증하는 과정을 거친다.

 

naver예시) client 단에서 처리할 수 있게 java로 우선 처리되어 있다.