Spring MVC中使用 hibernate-validtor進行服務端驗證
搭好Spring MVC的基本框架,並且可以成功執行起來
…此步驟省略
引入依賴包
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
在Spring MVC驅動配置中加上hibernate-validator
<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
<!-- 校驗器 -->
<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>
建立需要服務端驗證的Bean
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
public class UserVO {
@NotEmpty(message = "使用者名稱不能為空")
private String userName;
@Length(min=3, max=15,message = "密碼長度不對")
private String userPassword;
//setters and getters …
}
在Controller中進行校驗,並且返回繫結引數異常情況
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.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import top.yuyufeng.sample.web.vo.UserValidVO;
import javax.validation.Valid;
@Controller
public class LoginValidController {
private static UserValidVO userValidVO = new UserValidVO();
/**
* 跳轉到登入介面
*
* @return
*/
@RequestMapping(value = "/login-valid", method = RequestMethod.GET)
public String toLogin(Model model) {
model.addAttribute("userValidVO", userValidVO); //必須新增 不然Spring form標籤會報錯
return "login-valid";
}
@RequestMapping(value = "/doValidLogin", method = RequestMethod.POST)
public String userLogin(@Valid UserValidVO userValidVO, BindingResult br, Model model) {
if (!br.hasErrors()) {
model.addAttribute("loginValid", "success");
}
return "login-valid";
}
}
前端頁面表單,和異常展示(使用http://www.springframework.org/tags/form標籤)
<%--
Created by IntelliJ IDEA.
User: yuyufeng
Date: 2017/9/28
Time: 9:18
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head>
<title>login</title>
<%@ include file="include/head.jsp" %>
<style>
.error-area {
color: red;
}
</style>
</head>
<body>
<hr/>
<%--Spring form 表單--%>
<form:form id="my-form" method="post" modelAttribute="userValidVO" action="/doValidLogin">
使用者登入
<table>
<tr>
<td><form:label path="userName">使用者名稱:</form:label></td>
<td><form:input path="userName"/></td>
<td><form:errors path="userName" cssClass="error-area"/></td>
</tr>
<tr>
<td><form:label path="userPassword">密碼:</form:label></td>
<td><form:input path="userPassword"/></td>
<td><form:errors path="userPassword" cssClass="error-area"/></td>
</tr>
<tr>
<td>
<button type="submit">立即登入</button>
</td>
<td>
<button type="reset">重置</button>
</td>
</tr>
<tr>
<td><c:out value="${loginValid}"></c:out></td>
</tr>
</table>
</form:form>
</body>
</html>
摘錄
Hibernate Validator 是 Bean Validation 的參考實現 。Hibernate Validator 提供了 JSR 303 規範中所有內建 constraint 的實現,除此之外還有一些附加的 constraint。
在日常開發中,Hibernate Validator經常用來驗證bean的欄位,基於註解,方便快捷高效。
1. Bean Validation 中內建的 constraint
註解 | 作用 |
---|---|
@Valid | 被註釋的元素是一個物件,需要檢查此物件的所有欄位值 |
@Null | 被註釋的元素必須為 null |
@NotNull | 被註釋的元素必須不為 null |
@AssertTrue | 被註釋的元素必須為 true |
@AssertFalse | 被註釋的元素必須為 false |
@Min(value) | 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 |
@Max(value) | 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 |
@DecimalMin(value) | 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 |
@DecimalMax(value) | 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 |
@Size(max, min) | 被註釋的元素的大小必須在指定的範圍內 |
@Digits (integer, fraction) | 被註釋的元素必須是一個數字,其值必須在可接受的範圍內 |
@Past | 被註釋的元素必須是一個過去的日期 |
@Future | 被註釋的元素必須是一個將來的日期 |
@Pattern(value) | 被註釋的元素必須符合指定的正規表示式 |
- Hibernate Validator 附加的 constraint
註解 | 作用 |
---|---|
被註釋的元素必須是電子郵箱地址 | |
@Length(min=, max=) | 被註釋的字串的大小必須在指定的範圍內 |
@NotEmpty | 被註釋的字串的必須非空 |
@Range(min=, max=) | 被註釋的元素必須在合適的範圍內 |
@NotBlank | 被註釋的字串的必須非空 |
@URL(protocol=,host=, port=, regexp=, flags=) | 被註釋的字串必須是一個有效的url |
@CreditCardNumber | 被註釋的字串必須通過Luhn校驗演算法,銀行卡,信用卡等號碼一般都用Luhn計算合法性 |
@ScriptAssert(lang=, script=, alias=) | 要有Java Scripting API 即JSR 223 |
@SafeHtml(whitelistType=, additionalTags=) | classpath中要有jsoup包 |
@NotNull | 任何物件的value不能為null |
@NotEmpty | 集合物件的元素不為0,即集合不為空,也可以用於字串不為null |
@NotBlank | 只能用於字串不為null,並且字串trim()以後length要大於0 |
相關文章
- 用fluent-validator,進行Java服務端驗證Java服務端
- Spring Boot使用JWT進行token驗證Spring BootJWT
- MVC驗證10-到底用哪種方式實現客戶端服務端雙重非同步驗證MVC客戶端服務端非同步
- Oracle服務端驗證機制Oracle服務端
- SMSSDK驗證碼服務端校驗介面服務端
- Spring AI(使用Ollama大模型進行AI驗證)SpringAI大模型
- MVC驗證01-基礎、遠端驗證MVC
- ActionCable 中怎樣使用 devise 進行驗證dev
- Spring Cloud Alibaba 使用RestTemplate進行服務消費SpringCloudREST
- 如何使用ssh_scan遠端驗證SSH服務的配置和策略
- PHP (Laravel) 實現 iOS 內購服務端驗證PHPLaraveliOS服務端
- Spring Cloud Alibaba 使用Feign進行服務消費SpringCloud
- spring mvc實現登入驗證碼SpringMVC
- Linux中如何使用systemctl進行服務的管理?Linux
- Winform中使用HttpClient與後端api服務進行互動ORMHTTPclient後端API
- MVC學習筆記之:ASP.NET MVC的客戶端驗證-jQuery.validate驗證結合Model驗證中的實現MVC筆記ASP.NET客戶端jQuery
- 蘋果遠端裝置管理服務DEP含有驗證缺陷蘋果
- Spring Cloud Alibaba系列(三)使用feign進行服務呼叫SpringCloud
- MVC驗證09-使用MVC的Ajax.BeginForm方法實現非同步驗證MVCORM非同步
- ASP.NET MVC結合jQuery外掛進行資料驗證ASP.NETMVCjQuery
- 【Azure 應用服務】應用程式碼需要客戶端證書進行驗證,部署到App Service後,如何配置讓客戶端攜帶證書呢?客戶端APP
- MVC3中使用驗證介面卡修改預設的驗證提示資訊MVC
- Spring Boot(二十):使用 spring-boot-admin 對 Spring Boot 服務進行監控Spring Boot
- Spring Cloud Alibaba 使用 feign 和 rebion 進行服務消費SpringCloud
- 使用 OAuth 2.0 進行 Kafka 身份驗證 - strimziOAuthKafka
- 使用 Spring 3 MVC HttpMessageConverter 功能構建 RESTful web 服務SpringMVCHTTPRESTWeb
- 服務端和 Web 端分離架構下使用 passport 進行前後臺使用者各自的認證服務端Web架構Passport
- 驗證碼服務釋出上線
- spring 的遠端服務是?Spring
- mvc 客戶端 驗證 失效 沒有 form 標籤MVC客戶端ORM
- 慶軍之FastTunnel中轉服務端載入證書AST服務端
- 如何在Vue專案中引入騰訊驗證碼服務Vue
- SpringCloud系列使用Eureka進行服務治理SpringGCCloud
- MVC驗證08-jQuery非同步驗證MVCjQuery非同步
- 使用Moya庫,進行https證書校驗HTTP
- 透過 ForwardAgent ,在遠端機器上,使用本機 ssh key 進行驗證Forward
- MVC驗證11-對複雜型別使用jQuery非同步驗證MVC型別jQuery非同步
- Spring MVC 中 HandlerInterceptorAdapter的使用SpringMVCAPT