회원가입할때 많이 씀.
값을 받아와서,
커맨드 객체는 dto.class
컨트롤러단의 validator 객체로 검증 실시 후
view단 => 클라이언트
공통기능을 하는 클래스를 하나 만들어서(StudentValidator), 값 체크하는 메소드를 넣어줌
ValidationUtils 클래스
오류 있으면 각 오류에 맞는 메시지를 보여준다.
@Valid와 @InitBinder
@Valid 오류 발생시
실습
그대로 전송
이거대신
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id","trouble");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "pw","trouble");
이게 더 간편
로그보면잘나옴
소스코드
package com.lgy.spring_validation_second;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Student {
private String id;
private String pw;
}
package com.lgy.spring_validation_second;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@Slf4j
public class StudentController {
@RequestMapping("/studentForm")
public String studentForm(){
return "createPage";
}
// Student : 커맨드 객체(dto로 주로 사용)
// BindingResult : 스프링에서 제공하는 기본 validation
@RequestMapping("/student/create")
public String studentCreate(Student student, BindingResult result){
String page ="createDonePage";
// StudentValidator : 공통기능 validation 체크하는 클래스 객체
StudentValidator validator = new StudentValidator();
validator.validate(student, result);
// errors.rejectValue 메소드가 호출되면 result.hasErrors() 가 참
if (result.hasErrors()){
log.info("@# result.hasErrors() id=>"+result.getFieldError("id"));
log.info("@# result.hasErrors() pw=>"+result.getFieldError("pw"));
page = "createPage";
}
return page;
}
}
package com.lgy.spring_validation_second;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
//Validator: 스프링에서 제공하는 기본 validation 인터페이스
@Slf4j
public class StudentValidator implements Validator {
// supports : 커맨드 객체 지정(dto 해당)
// <?> : 제네릭 타입파라미터를 어떤것이라도 받아줌(ex> String , integer)
@Override
public boolean supports(Class<?> clazz) {
// 커맨드 객체를 clazz 매개변수로 부터 배치됨(validation 체크 대상이 됨)
return Student.class.isAssignableFrom(clazz);
}
// target : validation 체크 대상인 커맨드 객체
// errors :결과값 받는 객체
@Override
public void validate(Object target, Errors errors) {
log.info("@# validate()");
Student student = (Student) target; //다운캐스팅
/*
String id = student.getId();
if(id == "" || id.trim().isEmpty()){
log.info("@# id is null or empty");
// 결과값 객체에 id가 문제생겼다고 리턴
errors.rejectValue("id","trouble");
}
String pw = student.getPw();
if(pw == "" || id.trim().isEmpty()){
log.info("@# pw is null or empty");
// 결과값 객체에 id가 문제생겼다고 리턴
errors.rejectValue("pw","trouble");
}
*/
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id","trouble");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "pw","trouble");
}
}
<%--
Created by IntelliJ IDEA.
User: GGG
Date: 2023-06-22
Time: 오후 12:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
createDonePage.jsp 입니다.
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: GGG
Date: 2023-06-22
Time: 오후 12:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
createPage.jsp입니다.
<form action="student/create">
아이디 : <input type="text" name="id"><br>
비밀번호 : <input type="password" name="pw"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
validation 3rd/////////////////////////////////
@Valid 어노테이션을 걸어서 initBinder사용
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
@Valid 를 사용하기 위한 디펜던시 추가
// @Valid Student 객체를 받아서 유효성 체크
@InitBinder
public void initBinder(WebDataBinder binder){
// Student 객체를 binder로 받아서 StudentController 객체를 사용해서 유효성체크
binder.setValidator(new StudentValidator());
}
그대로찍힘
'백 > spring' 카테고리의 다른 글
스프링 기본파싱전략과 json통신 (0) | 2023.07.30 |
---|---|
스프링 시큐리티 2- ng처리 (0) | 2023.07.12 |
스프링 시큐리티 1 (0) | 2023.07.11 |
파일 업로드 부터 수정까지 (0) | 2023.06.28 |
트랜잭션이란!??!?!!?!??! (0) | 2023.06.22 |