springmvc에서 JSR-303을 사용하여 데이터 검증 실례
서버 검증:
1. jar 패키지 추가:
여기서는 hibernate-validator를 사용하여 구현합니다(버전: hibernate-validator -4.3.0. Final-dist.zip). 아래의jar 패키지를classpath(WEB-INF/lib에 추가하면 됩니다).
<!-- -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- -->
<property name="basenames">
<list>
<value>classpath:CustomValidationMessages</value>
</list>
</property>
<!-- -->
<property name="fileEncodings" value="utf-8" />
<!-- , -->
<property name="cacheSeconds" value="120" />
</bean>
<!-- -->
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- hibernate -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- , , classpath ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource" />
</bean>
자동 등록 validator
<mvc:annotation-driven conversion-service="conversionService" validator="validator">
</mvc:annotation-driven>
예 설명예 1:
import javax.validation.constraints.NotNull;
public class UserModel {
@NotNull(message="{username.not.empty}")
private String username;
}
@NotNull을 통해 이 username 필드가 비어 있지 않도록 지정합니다. 검증에 실패했을 때 이전에 지정한 messageSource에서'username.not.empty'에 대한 오류 정보를 얻을 수 있습니다. 여기는'{오류 메시지 키값}'형식으로 지정해야만 messageSource에서 얻을 수 있습니다.
@Controller
public class HelloWorldController {
@RequestMapping("/validate/hello")
public String validate(@Valid @ModelAttribute("user") UserModel user, Errors errors) {
if(errors.hasErrors()) {
return "validate/error";
}
return "redirect:/success";
}
}
명령 객체에 @Valid를 메모하여 Spring MVC에 이 명령 객체는 바인딩이 완료된 후 JSR-303 인증을 수행해야 하며 인증에 실패하면 오류 정보가 errors 오류 객체에 추가됩니다.인증 실패 후 표시할 페이지(/WEB-INF/jsp/error.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:form commandName="user">
<form:errors path="*" cssStyle="color:red"></form:errors><br/>
</form:form>
브라우저 주소 표시줄에 입력http://localhost:8080/validate/hello즉, username 데이터가 없으면 요청 후 검증 실패 인터페이스에 직접 가서 오류 메시지를 표시합니다. "사용자 이름이 비어 있을 수 없습니다."요청할 때 "?username=zhang"을 가지고 있으면 성공 페이지로 바뀝니다.예2:
public class Items {
private Integer id;
@Size(min=1,max=20,message="{items.name.length.error}")
private String name;
@NotNull(message="{items.createtime.isNULL}")
private Date createtime;
set() get()...
}
public String editItemsSubmit(Model model, @Validated Items items,
BindingResult bindingResult) throws Exception {
if(bindingResult.hasErrors()){
List<ObjectError> allErrors = bindingResult.getAllErrors();
for(ObjectError objectError:allErrors) {
System.out.println(objectError.getDefaultMessage());
}
// model pojo
model.addAttribute("items",items);
//
return "items/editItems";
}
return "success";
}
<table width="100%" border=1>
<tr>
<td> </td>
<td><form:input type="text" path="items.name" value="${items.name }"/></td><form:errors path="items.name"/>
</tr>
<tr>
<td> </td>
<td><input type="text" name="createtime" value="<fmt:formatDate value="${items.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
</tr>
그리고 jsp 페이지는 이전의 페이지입니다. 입력이 합법적이지 않은 것을 표시하고 messageSource Bean을 구성하면 기본적으로 다음 오류 메시지 키가 검증된 객체에 자동으로 생성됩니다.
테스트 용례와 같이
public String pattern(@Valid @ModelAttribute(“model”) PatternModel model, Errors errors)
다음과 같은 오류 메시지 키가 자동으로 발생합니다.메모 검증
검증된 데이터 유형
설명
@AssertFalse
Boolean,boolean
유효성 검사 메모의 요소 값은false
@AssertTrue
Boolean,boolean
메모의 요소 값이true 인지 확인
@NotNull
모든 유형
주해의 원소 값이null이 아니라는 것을 검증합니다
@Null
모든 유형
유효성 검사 메모의 요소 값은null
@Min(value=값)
BigDecimal, BigInteger, byte, short, int, long, 등 번호 또는 CharSequence 하위 유형
메모의 요소 값이 @Min에서 지정한value 값보다 큰지 확인합니다.
@Max(value=값)
@Min의 요구와 같습니다.
유효성 검사 메모의 요소 값이 @Max에서 지정한value 값보다 작음
@DecimalMin(value=값)
@Min의 요구와 같습니다.
메모의 요소 값이 @ DecimalMin에서 지정한 value 값보다 큰지 확인합니다.
@DecimalMax(value=값)
@Min의 요구와 같습니다.
@ DecimalMax에서 지정한 value 값보다 작은 주석 요소 값 확인
@Digits(integer=정수 자릿수, fraction=소수점 자릿수)
@Min의 요구와 같습니다.
메모의 요소 값의 정수 및 소수 자릿수 상한선 확인
@Size(min= 하한, max= 상한)
문자열, Collection, Map, 배열 등
문자 길이, 집합 크기 등 지정한 구간에 대한 주석 요소 값을 검증합니다.
@Past
java.util.Date, java.util.Calendar; Joda Time 라이브러리의 날짜 유형
메모의 요소 값(일 유형)이 현재 시간보다 빠른지 확인합니다.
@Future
@Past 요청과 동일
현재 시간보다 늦게 메모의 요소 값 확인 (일자 유형)
@NotBlank
CharSequence 하위 유형
유효성 검사 메모의 요소 값이 비어 있지 않습니다 (null, 첫 번째 공백을 제거한 후 길이는 0). @Notempty와 다르며, @NotBlank는 문자열에만 적용되고 비교할 때 첫 번째 공백을 제거합니다.
@Length(min= 하한, max= 상한)
CharSequence 하위 유형
주해의 원소 값 길이가 min과 max 구간에 있는지 확인하기
@NotEmpty
CharSequence 하위 유형, Collection, Map, 배열
유효성 검사 메모의 요소 값이null이고 비어 있지 않음 (문자열 길이는 0, 집합 크기는 0)
@Range(min= 최소, max= 최대)
BigDecimal, BigInteger, CharSequence, byte, short, int, long 등 원자 유형과 포장 유형
메모의 요소 값이 최소값과 최대값 사이인지 확인합니다.
@Email(regexp=정규 표현식, flag=로고 모드)
CharSequence 하위 유형(예: String)
메모의 요소 값이 Email인지 확인하거나regexp와flag를 통해 사용자 정의 이메일 형식을 지정할 수 있습니다
@Pattern(regexp=정규 표현식, flag=로고 모드)
String, CharSequence의 하위 유형
메모의 요소 값이 지정된 정규 표현식과 일치하는지 확인합니다.
@Valid
모든 비원자 유형
귀속 검증 관련 대상 지정하기;사용자 객체에 주소 객체 속성이 있는 경우 사용자 객체를 검증할 때 주소 객체를 함께 검증하려면 주소 객체에 @Valid 메모를 추가하여 종속 인증을 수행합니다.
여기에는 Hibernate Validator가 제공하는 대부분의 검증 제약 주석만 열거되어 있습니다. Hibernate validator 공식 문서를 참고하여 다른 검증 제약 주석과 사용자 정의 검증 제약 주석의 정의를 이해하십시오.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
springmvc application/octet-stream problemmistake: Source code: Solution: Summarize: application/octet-stream is the original binary stream method. If the convers...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.