스프링

blog post

 

 1. Java 유효성 검사 API (JSR-303) -  API 설명

출처 : https://developer.ucsd.edu/develop/data-layer/jpa/java-validation-api.html 

 페이지에는 다음 주제 / 질문 / 사용법에 대한 정보 및 참조가 포함되어 있습니다.

  1. 왜 나는 Spring에서 내장 된 Java Validation API (JSR-303)를 사용하겠습니까?
  2. JSR-303과 함께 Spring 유효성 검사 메카니즘을 사용할 수 있습니까?
  3. JSR-303은 Spring처럼 컨트롤러 레이어에서 유효성 검사를 수행하도록 제한합니까?
  4. Spring 애플리케이션에서 Java Validation API를 켜려면 어떻게해야합니까?
  5. 유효성 검사기를 다른 사용자와 서비스로 공유 할 수 있습니까?

아키텍처 개요

 Java Validation API를 이해하려면 다음 문서를 참조하십시오.

모범 사례 및 사용법

이 패키지에서 사용 가능한 API 만 사용하십시오.

 이 패키지에서 사용 가능한 API 만 사용하십시오.

  • *
    import javax.validation. *;
    *
    
  • Hibernate Validator는 jsr-303에 대한 레퍼런스 구현이었다.
    • Hibernate Validator의 최신 버전이 더 많이 제공하지만 (위에 나열된 패키지에 포함되지 않은 것을 사용하지 마십시오)

Spring 내에서 jsr-303 구성

 

  • 클래스 경로에 라이브러리 포함
  • spring context.xml 파일에 다음을 포함 시키십시오.

 

*

...
<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <!-- Configures Spring MVC DataBinder instances -->
        <bean
            class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator" ref="validator" />
        </bean>
    </property>
</bean>

<!-- Creates the JSR-303 Validator -->
<bean id="validator"
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
</bean>
...

*

 

  • @Valid

@Valid : 가장 단순하고 기본적인 사용법으로, Validator 클래스를 만들 필요가 없습니다.

  • 유효성 검사 규칙을 사용하여 엔티티에 주석 달기
  •  
  • example
  • *
    
    ...
    @Entity
    @Table(schema = "COA_DB", name = "FUND")
    public class Fund implements Serializable {
    
        /**
         * IFOP
         * javax.validation.constraints.
         */
        @Size(min=4,max=10,message="Index size must be between 4 and 10")
        @Pattern(regexp = ".*(?=.{4,})(?=.*[\\d[a-z][A-Z]]{4,}).*", 
                        message = "At least 4 digit/alphabetic chars is required")
        String indx;
    
    }
    ...
    
    *

 

  • modelAttribute에서 @Valid를 호출하십시오.
    • *
      
      @Autowired
      private Validator validator;
      
      @RequestMapping(value = "test.html", method = RequestMethod.POST)
      public ModelAndView fundIndexFormSubmit(
              @Valid @ModelAttribute("fundCmd") FundCmd fundCmd,
              BindingResult bindingResults) {
          ...
          if (bindingResults.hasErrors()) {
              mav.setViewName("test-invalid.jsp");
          }else{
          ...
          }
          ...
      }
      
      *
      

 

Validation Groups

 

 검증 그룹 : 참조  그룹 검증

 @Valid annotation 과 함께 유효성 Validation Groups을 사용하는 방법

 

  @Valid annotation 과 함께 Validation Groups 그룹을 사용하는 방법

  • 당신은 순간에, 희망을 갖고 Spring과 Java가 가까운 장래에이 문제를 구현할 것입니다.
  • 그런 다음 유효성 검사 그룹을 사용하는 방법은 무엇입니까?
    • 다행히도, 당신은 같은 결과를 얻기 위해 실용적인 방법을 사용할 수 있습니다.

 

  • *
    
    @Controller("FundController")
    public class FundController {
    
        private Validator validator;
    
        @RequestMapping(value = "test.html", method = RequestMethod.POST)
        public ModelAndView fundIndexFormSubmit(
                @ModelAttribute("fundCmd") FundCmd fundCmd,
                BindingResult bindingResults) {
            ...
            validator = Validation.buildDefaultValidatorFactory().getValidator();
            //setting the group IndexCheck
            Set> violations = validator.validate(fundCmd, IndexCheck.class);
            for (ConstraintViolation constraintViolation : violations) {
                errors.add(...;
            }
            //check if errors exist
            if (errors.size()!=0) {
                mav.setViewName("test-invalid.jsp");
            }else{
            ...
            }
            ...
        }    
    ...
    
    * 

 

 

Validation Groups 과 스프링 Validator 를 함께 사용하는 방법

  • 이전 접근 방식은 괜찮지 만 스프링 밸리데이션을 만들고 스프링 밸리데이터를 삽입해야한다는 것을 극복하기 위해 스프링 밸리데이션과의 통합이 느슨합니다.
    1. Spring Validator 클래스 만들기
    2. @Component로 class 에 주석 달기
    3. Spring Validator에 자바 javax.validation.Validator 삽입하기
    4. 컨트롤러에서 새로 생성 된 Spring Validator를 삽입하십시오.
    5. 컨트롤러에서 그룹이 있으면 유효성 검사기 생성자에 전달하십시오.
  • 예:
  • example:
  • *
    
    ...
    import javax.validation.ConstraintViolation;
    import javax.validation.Validator;
    import javax.validation.metadata.ConstraintDescriptor;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import org.springframework.validation.Errors;
    
    @Component
    public class FundValidator implements org.springframework.validation.Validator{
    
        Class[] groups;
    
        @Autowired
        private Validator validator;
    
        public FundValidator() {
            super();
        }
    
        public FundValidator(Class[] groups) {
            super();
            this.groups = groups;
        }
    
        public boolean supports(Class clazz) {
            return Fund.class.isAssignableFrom(clazz);
        }
    
        public void validate(Object target, Errors errors) {
            Fund fund = (Fund)target;
            Set> constraintViolations = validator.validate(fund,groups);
            for (ConstraintViolation constraintViolation : constraintViolations) {
                ConstraintDescriptor test = constraintViolation.getConstraintDescriptor();
                String propertyPath = constraintViolation.getPropertyPath().toString();
                String message = constraintViolation.getMessage();
                errors.rejectValue(propertyPath, "", message);
            }
        }
    
        public Class[] getGroups() {
            return groups;
        }
    
        public void setGroups(Class[] groups) {
            this.groups = groups;
        }
    
    
    }
    *
    @Controller("FundController")
    public class FundController {
    
    @Autowired
    private FundValidator fundValidator;
    
        @RequestMapping(value = "test.html", method = RequestMethod.POST)
        public ModelAndView fundIndexFormSubmit(
                @ModelAttribute("fundCmd") FundCmd fundCmd,
                BindingResult bindingResults) {
            ...
            Class[] groups = { IndexCheck.class };
            // validate
            fundValidator.setGroups(groups);
            fundValidator.validate(bin, bindingResults);
            if (bindingResults.hasErrors()) {
                mav.setViewName("test-invalid.jsp");
            }else{
            ...
            }
            ...
        }
    ...
    }

 

 

통치

  • 가능한 경우 그룹 내에서 맞춤 검증 도구를 공유하십시오 (예 : IFOPValidator ...).

  • Java에서 validation API 만 사용하십시오. import javax.validation. *;

    • API 구현이 제공하는 확장 된 유효성 검사기를 사용하지 마십시오.
    • 우리가 Hibernate를 구현했기 때문에 우리의 경우 다음 패키지는 피해야한다 : import org.hibernate.validator. *;

많은

참조  최대 절전 모드 검사기 (JSR 303 참조 구현) 참조 가이드

참고 문헌

 

 

 2. [Spring] JSR-303 빈 검증 (유효성 검증)


출처: http://donggov.tistory.com/36 [동고랩]

 

JSR-303 빈 검증 (유효성 검증)

 

서버 레벨에서 객체 유효성 검증을 쉽게 하는방법이다.

Spring 3.0? 3.1부터 지원하는것 같음.

 

실습삼아 한번 적용해봤다.

방법은 Apache bean validation과 Hibernate Valitator가 있는데, Hibernate를 사용해보기로 했다.

 

순서를 요약하면 아래 4가지만 하면된다.

1) (Maven 기준) pom.xml에 Dependency 추가

2) bean에 Annotation 추가

3) 컨트롤러에 @Valid 및 BindingResult 설정

4) jsp 수정

 

이제 본격적으로 적용해보자.

 

1. Maven 기준으로 hiberbate dependency 추가한다.

        <!-- JSR-303 Bean Validation -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.2.Final</version>
        </dependency>



 

 

2. bean에 유효성 검증 Annotation을 추가한다.

샘플로 NotNull과 Size만 적용해보기로 했다.

유효성 Annotation하고 message에 검증을 어겼을시 전달할 메시지를 작성한다.

(프로퍼티 값도 사용가능한데 이건 다음에 적용해보기로)

@NotNull(message="필수값입니다.")
private String memNm;
 
@NotNull(message="필수값입니다.")
@Size(min=5, max=30, message="5~30자 사이로 입력하세요.")
private String nickNm;



 

 

3. 컨틀롤러를 수정한다.

빈 객체앞에 @Valid 추가. BindingResult 설정. 둘다 필수다.

그후 유효성 검증 실패할 경우 로직을 추가한다.

@RequestMapping(value="/insertSample.do", method = RequestMethod.POST)
public String insertSample(@ModelAttribute @Valid SampleVo sampleVo, BindingResult bindingResult)
 throws Exception {
    
    if ( bindingResult.hasErrors() ) {
        return "/com/donggov/sample/insertSample";  // 유효성 검증 실패시 로직 및 튕겨낼곳 설정
    }
    
    return "redirect:/sample/selectListSample.do";
}

 

 

 

4. jsp를 수정한다.

우선 아래 form 태그 라이브러리를 추가한다. 

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

 

form 태그를 사용하여 일반 소스를 아래와 같이 작성한다.

commandName은 컨트롤러에서 받을 객체명과 동일하게 설정한다.

path에는 bean에서 선언한 필드명과 동일하게 설정한다.

 

<form:form id="memForm" commandName="sampleVo">
<!-- <form:errors path="*" cssClass="error" />-->
    <div>
        이름 : <form:input path="memNm"/><form:errors path="memNm" cssClass="error" />
    </div>
    <div>
        닉네임 : <form:input path="nickNm" /><form:errors path="nickNm" cssClass="error" />
    </div>
    <div>
        <a href="/sample/selectListSample.do"><button type="button">목록</button></a>
        <button type="button" id="btnInsert" >등록</button>
    </div>
</form:form>


 

설정 끝.

설정이 제대로 적용이 되는지 확인을 해보자.

 

잘된다. 테스트해보니 룰을 어길경우, 모든 에러 메세지를 다 출력한다.

이것도 우선순위를 둘수있는 방법이 있을것 같은데 그냥 패스

 

 

이름, 닉네임 둘다 입력안한 경우

 

 

이름엔 빈값, 닉네임엔 1자만 입력한 경우

 

 

이상 JSR0-303 빈 검증 끝



출처: http://donggov.tistory.com/36 [동고랩]

 

 

 3. [Spring] JSR-303 빈 검증 (유효성 검증)

 

public class Member{

   //message 항목이 없으면 영문 기본 문구가 보여짐

   @NotNull

   private String id;

   @Size(min="3",max="5",message="3자이상 5자미만으로 작성해야 합니다.")

   private String password;

}

 

<데이터 검증을 위한 기본제공 Annotation>

어노테이션 설명

@AssertFalse  거짓인지?

@AssertTrue 참인지?

@DecimalMax 지정 값 이하의 실수인지?

@DecimalMin 지정 값 이상의 실수인지?

@Digits(integer=,fraction=) 정수 여부

@Future 미래 날짜인지?

@Max 지정 값 이상인지?

@Min 지정 값 이하인지?

@NotNull  Null이 아닌지?

@Null Null인지?

@Pattern(regex=,flag=) 정규식을 만족하는지?

@Past   과거날짜인지?

@Size(min=,max=)  문자열 또는 배열등의 길이 만족 여부  



출처: http://appsnuri.tistory.com/115 [이야기앱 세상]

 

 4.  validation - JH  설정     

pom.xml 에 다음을 의존성 주입을 한다.

내가 하는 방식은 의존성 주입 라이브러리는 다음 아래것이  전부이다.

 

		
	        <!-- JSR-303 Bean Validation -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.2.Final</version>
        </dependency>


 

@Valid에는 기본적으로 14개의 검증 어노테이션을 제공한다.

 

@AssertFalse : false 값만 통과 가능
@AssertTrue : true 값만 통과 가능
@DecimalMax(value=) : 지정된 값 이하의 실수만 통과 가능
@DecimalMin(value=) : 지정된 값 이상의 실수만 통과 가능
@Digits(integer=,fraction=) : 대상 수가 지정된 정수와 소수 자리수보다 적을 경우 통과 가능
@Future : 대상 날짜가 현재보다 미래일 경우만 통과 가능
@Past : 대상 날짜가 현재보다 과거일 경우만 통과 가능
@Max(value) : 지정된 값보다 아래일 경우만 통과 가능
@Min(value) : 지정된 값보다 이상일 경우만 통과 가능
@NotNull : null 값이 아닐 경우만 통과 가능
@Null : null일 겨우만 통과 가능
@Pattern(regex=, flag=) : 해당 정규식을 만족할 경우만 통과 가능
@Size(min=, max=) : 문자열 또는 배열이 지정된 값 사이일 경우 통과 가능
@Valid : 대상 객체의 확인 조건을 만족할 경우 통과 가능

 

MemberVO

int 타입 같은 경우 Valid  로 유효성 검사가 안된다. 따라서,  String 타입으로 유효성 검사를 하는 것이 

좋다.  어차피 mybatis 문자열 타입이라 해도  정수값으로 DB 에 설정되어 들어가기 때문에 상관없다.

package net.macaronics.web.domain;

import java.sql.Timestamp;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;


import org.hibernate.validator.constraints.NotBlank;


public class MemberVO {
	private int mid;
	
	@NotBlank
	@Size(min=4,max=20,message="아이디의 크기는 4에서 20 사이 여야합니다.")
    @Pattern(regexp = ".*(?=.{4,})(?=.*[\\d[a-z][A-Z]]{4,}).*", 
                    message = "최소 4 자리 / 알파벳 문자가 필요합니다.")
	private String userid ;
	
	@NotNull(message="비밀번호는 필수 입니다.")
	@Size(min=5, max=10, message="비밀번호는 5 - 10 자 사이 여야합니다.")
	private String userpw ;

	
	@NotBlank(message="이름은 필수 입니다.")
	@Pattern(regexp="^[ㄱ-ㅎ가-힣]*$", message="이름은 한글만 가능합니다.")
	private String username;
	
	private String userpwCheck;
	
	@NotBlank(message="이메일은 필수 입니다.")
	@Pattern(regexp="\\w+[@]\\w+\\.\\w+", message="이메일 형식에 맞지 않습니다.")
	private String email ;
	
	@NotBlank(message="포인트는 필수 입니다.")
	@Pattern(regexp="^[0-9]*$", message="양수만 가능합니다.")
	private String upoint;
	
    private Timestamp regdate; 
    private Timestamp updatedate;
    
    
    //비밀번호 체크
    public boolean passwordCheck(){  	
    	return userpw.equals(userpwCheck);
    }

  
   setter, getter
}

 

 

ValidatorTestController

bindResult 다음에 Model 이 와야 한다. 순서가 틀리면 에러간 발생한다.

중복체크 및 비밀번호 체크는 다음과 같이  bindResult 다음    따로 코딩해서 처리해야 한다.

   //아이디 중복 체크
        if(memberService.idCheck(vo.getUserid())){
            logger.info("중복된 아이디 입니다.");
            model.addAttribute("idCheck", "중복된 아이디 입니다." );
            return "test/validMember";
        }
        
        //비밀번호 체크
        if(!vo.passwordCheck()){        
            logger.info("비밀번호와 비밀번호 확인이 일치하지 않습니다.");

            model.addAttribute("pwCheck", "비밀번호와 비밀번호 확인이 일치하지 않습니다." );
            return "test/validMember";
        }
            

 

/**
* <pre>
* 1. 패키지명 : test.controller
* 2. 타입명 : ValidatorTestController.java
* 3. 작성일 : 2017. 10. 26. 오후 1:37:55
* 4. 저자 : 최준호
* 
* </pre>
*
*/
package test.controller;

import javax.validation.Valid;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import net.macaronics.web.domain.MemberVO;
import net.macaronics.web.service.MemberService;

@Controller
public class ValidatorTestController {
 
	private static Logger logger =LoggerFactory.getLogger(ValidatorTestController.class);
	
	@Autowired
	private MemberService memberService;
	
	@RequestMapping(value="/validTestform", method=RequestMethod.GET)
	public String validTestForm(MemberVO memberVO ) throws Exception{
		
		return "test/validMember";
	}
	
	
	//bindResult 다음에 Model 이 와야 한다. 순서가 틀리면 에러간 발생한다.
	@RequestMapping(value="/validTestform", method=RequestMethod.POST)
	public String validTestAction(@ModelAttribute @Valid MemberVO vo,  BindingResult  bindResult, Model model) throws Exception{
	
		if(bindResult.hasErrors()){		
			return "test/validMember";	
		}
		
		//아이디 중복 체크
		if(memberService.idCheck(vo.getUserid())){
			logger.info("중복된 아이디 입니다.");
			model.addAttribute("idCheck", "중복된 아이디 입니다." );
			return "test/validMember";
		}
		
		//비밀번호 체크
		if(!vo.passwordCheck()){		
			logger.info("비밀번호와 비밀번호 확인이 일치하지 않습니다.");

			model.addAttribute("pwCheck", "비밀번호와 비밀번호 확인이 일치하지 않습니다." );
			return "test/validMember";
		}
				
		
		memberService.createMember(vo);	
	    return "redirect:/";
	}
	
	
	
	
	
}



 

MemberServiceImpl

	/* (아이디 중복 체크)
	 * @see net.macaronics.web.service.MemberService#idCheck()
	 */
	@Override
	public boolean idCheck(String userid) throws Exception {
	    Integer  num =dao.idCheck(userid);
		//0보다 크면 중복 으로 true 리턴  
		return num > 0 ? true: false; 
	}
	

 

Mapper

	<!-- 아이디 중복 체크 -->
	<select id="idCheck" resultType="int">
	<![CDATA[ 
		select count(TBL_MEMBER.userid) from TBL_MEMBER WHERE userid=#{userid}
	]]>
	</select>

 

validMember.jsp

 

1. taglib 를 설정한다.

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

 

2. form:form 태그형식으로 설정한다.  

<form:form  method="post" commandName="memberVO">

commandName 은 컨트롤에서 MemberVO 첫글 자 소문자로 변환 후 사용한다.

변경하고 싶으면 컨트롤에서 @ModelAttribute(name="vo") @Valid MemberVO vo 

변경후 commandName="vo" 로 변경하변 된다.

 

3. input path 에는 name 값을 적는다.  에러 있을 경우 페이지로 되돌아 와 기존의  폼 입력 값이 자동으로  설정 된다.

<form:input path="userid" cssClass="form-control" />

 

4. 에러가 출력은 form:error 형식을  취하며 path 에는 name 값을 적는다.  

<form:errors path="userid" cssClass="label label-danger" />

name 값은 jsp userbean 처럼 VO 클래스에서  필드값과 동일해야 한다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<!-- 합쳐지고 최소화된 최신 CSS -->
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">

<!-- 부가적인 테마 -->
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">

<!-- 합쳐지고 최소화된 최신 자바스크립트 -->
<script
	src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>

<body>

	<h1 class="text-center">회원 가입</h1>
	<div class="row">

		<div class="col-xs-3 col-sm-3 "></div>

		<div class="col-xs-6 col-sm-6">

			<form:form  method="post" commandName="memberVO">
				<table class="table">
					<tr>
						<td class="primary">아이디</td>
						<td><form:input path="userid" cssClass="form-control" />
						<br>
						<form:errors path="userid" cssClass="label label-danger" />
						<br>
						<span class="label label-danger">${idCheck}</span>
						</td>
					</tr>

					<tr>
						<td class="primary">비밀번호</td>
						<td>
						<form:password  path="userpw" cssClass="form-control" />
						<br>
						<form:errors path="userpw" cssClass="label label-danger" />
						
						</td>
					</tr>

					<tr>
						<td class="primary">비밀번호확인</td>
						<td><input type="password" name="userpwCheck" class="form-control" >
						 <br><span class="label label-danger">${pwCheck}</span>
						</td>
					</tr>

					<tr>
						<td class="primary">이름</td>
						<td><form:input  path="username" cssClass="form-control" />
						<br>
						<form:errors path="username"  cssClass="label label-danger"/>
						</td>
					</tr>

					<tr>
						<td class="primary">이메일</td>
						<td>
						<form:input  path="email" cssClass="form-control" />
						<br>
						<form:errors path="email" cssClass="label label-danger" />
						</td>
					</tr>

					<tr>
						<td class="primary">포인트</td>
						<td><form:input  path="upoint" cssClass="form-control" />
						<br>
						<form:errors path="upoint" cssClass="label label-danger" />
						</td>
					</tr>
					
					<tr>
						<td colspan="2">
							<input type="submit" value="전송" class="btn btn-success"> 
						</td>
					</tr>

				</table>
			</form:form>


		</div>



	</div>



</body>
</html>

 

 

출력

 

 

 

 5.  정규식 패턴  

 

1) 비밀번호 유효성 체크 ( 문자, 숫자, 특수기호 )

 

2) 자바 정규표현식 비밀번호 유효성 관련 예제

 

3) [TIP] 정규표현식(Pattern Matching) 완전 정리!

출처: http://highcode.tistory.com/6 [HighCode]

 

4) [REPLACEALL] 특수문자 제거, 이메일 유효성, 연속 된 스페이스 제거 -- 정규식

출처: http://happybuk.tistory.com/entry/REPLACEALL-특수문자-제거-이메일-유효성-연속-된-스페이스-제거-정규식 [해피북닷컴]

 

5) [JAVA Regex기본] 문자열 한글, 영문자, 숫자, 특수문자 구분하는 방법

출처: http://superfelix.tistory.com/70 [☼ 꿈꾸는 도전자 Felix !]

 

6)  비밀 번호 유효성 검사를위한 Regexp Java

 

7) https://www.google.co.kr/search?q=@Pattern+password&tbm=isch&tbs=rimg:CS2m4JHsQh95IjgpC225EWeJaa8OLj5VUGxeOrb14MaAT-BH0nhOdOJsW3c0usPQKvJv_10G4ilAOHWevrgCbhKQrIyoSCSkLbbkRZ4lpEcOyD8Qw3wyqKhIJrw4uPlVQbF4RRZ8O1UBOPYwqEgk6tvXgxoBP4BFNZ-yOlNYLbioSCUfSeE504mxbEcDc3Rm18NqIKhIJdzS6w9Aq8m8Rglia_1_1kHfCsqEgn_1QbiKUA4dZxFYhRfxV36V_1CoSCa-uAJuEpCsjEbbbNm3X8BLV&tbo=u&sa=X&ved=0ahUKEwjw1oeIlpjXAhXBoJQKHWHPA4EQ9C8IHw&biw=1280&bih=893&dpr=1#imgrc=4tWsevc5WxXjgM:

 

검색어 @Pattern password

 

8) Hibernate validator example

   @Size(min=5, max=10, message="Your name should be between 5 - 10 characters.")
   private String name;


    @Min(value=5, message="Please insert at least 5 characters")
    private String lastname;

    @NotNull(message="Please select a password")

    @Length(min=5, max=10, message="Password should be between 5 - 10 charactes")

    private String password;

    @Pattern(regexp="[0-9]+", message="Wrong zip!")

    private String zip;

     

    @Pattern(regexp=".+@.+\\..+", message="Wrong email!")

    private String email;

     

    @Range(min=18, message="You cannot subscribe if you are under 18 years old.")

    private String age;

 

 

9)  Spring MVC Form Validation with Annotations Tutorial

public class Subscriber {
 
    @Size(min=2, max=30) 
    private String name;
     
    @NotEmpty @Email
    private String email;
     
    @NotNull @Min(13) @Max(110)
    private Integer age;
     
    @Size(min=10)
    private String phone;
     
    @NotNull
    private Gender gender;
     
    @DateTimeFormat(pattern="MM/dd/yyyy")
    @NotNull @Past
    private Date birthday;
 
    ...
}

 

 

10) 비밀번호 변경에서 빈 검증

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

입찬소리는 무덤 앞에 가서 하라 , 입찬말은 죽어서나 하라는 뜻으로, 함부로 장담하지 말라는 말.

댓글 ( 0)

댓글 남기기

작성