Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗(yàn)證、文件上傳實(shí)例代碼
在上篇文章給大家介紹了Spring學(xué)習(xí)筆記1之IOC詳解盡量使用注解以及java代碼,接下來本文重點(diǎn)給大家介紹Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗(yàn)證、文件上傳實(shí)例代碼,具體內(nèi)容,請參考本文吧!
一、表單數(shù)據(jù)驗(yàn)證
用戶注冊時(shí),需要填寫賬號、密碼、郵箱以及手機(jī)號,均為必填項(xiàng),并且需要符合一定的格式。比如賬號需要32位以內(nèi),郵箱必須符合郵箱格式,手機(jī)號必須為11位號碼等??梢圆捎迷谧詴r(shí)驗(yàn)證信息,或者專門寫一個(gè)工具類用來驗(yàn)證;來看下在SpringMVC中如何通過簡單的注釋實(shí)現(xiàn)表單數(shù)據(jù)驗(yàn)證。
在javax.validation.constraints包下面,定義了多個(gè)注解。比如:
@NotNull: 所注解元素的值必須不能為null。注:表單中不填寫任何數(shù)據(jù)直接提交,并不意味著為null,而是空字符串。
@Size: 所注解的元素必須為String、集合或者數(shù)組,并且長度要符合給定的范圍。
@Past: 所注解的元素的值必須是一個(gè)過去的時(shí)間。
@Digits: 所注解的元素必須是數(shù)字,并且它的值必須有指定的位數(shù)。
@Pattern: 所注解的元素的值必須匹配給定的正則表達(dá)式
另外,在org.hibernate.validator.constraints包下面,定義了更多的注解。比如:
@Email: 匹配email格式。
@URL: 匹配url格式。
下面看一下在SpringMVC中如何使用。
1、首先在pom.xml文件中載入需要的
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.4.Final</version> </dependency>
需要注意的是,javax.validation只是定義了校驗(yàn)API,必須添加API的實(shí)現(xiàn)才行,比如org.hibernate.validator,否則會(huì)報(bào)錯(cuò)。
2、在類的屬性上添加注解,以User.java為例。
public class User implements Serializable { @Size(min = 32, max = 32, message = "uuid應(yīng)該為32位字符串") private String id; @Size(min = 1, max = 32, message = "賬號長度應(yīng)該在1-32位之間") private String username; @NotEmpty(message = "密碼不能為空") private String password; @NotEmpty(message = "email不能為空") @Email(message = "email格式不正確") private String email; @Size(min = 11, max = 11, message = "手機(jī)號長度為11位") private String cellphone; }
message: 如果表單數(shù)據(jù)驗(yàn)證失敗,可以顯示的錯(cuò)誤信息。
3、在UserController中應(yīng)用校驗(yàn)功能,添加@Valid注解即可。
以UserController.java為例:
@Controller @RequestMapping("/user") public class UserController { private UserService userService; @Autowired public UserController(UserService userService) { this.userService = userService; } @RequestMapping(value = "/register", method = RequestMethod.POST) public String processRegistration(@Valid User user, Errors errors) { //@Valid,user對象應(yīng)用校驗(yàn)功能 if (errors.hasErrors()) { //如果表單驗(yàn)證失敗,返回注冊頁面 return "register"; } if (user.getId() == "") user.setId(UUID.randomUUID().toString().replaceAll("-", "")); if (user.getRegDate() == 0) user.setRegDate(new Date().getTime()); userService.addUser(user); return "redirect:/user/" + user.getUsername(); } }
4、編寫jsp文件,展示頁面,以register.jsp為例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> <%@ page session="false" %> <html lang="en"> <head> <title>Register</title> <link rel="stylesheet" type="text/css" href="<c:url value="/resources/style.css" />" > </head> <body> <sf:form method="POST" action="/register/user/register" commandName="user"> <%-- 如果表單數(shù)據(jù)驗(yàn)證失敗,顯示錯(cuò)誤信息 --%> <sf:errors path="*" element="div" cssClass="errors"/><br /> <table align="center"> <tr> <td>UserName: </td> <td><sf:input path="username" cssErrorClass="errors"/></td> </tr> <tr> <td>Password: </td> <td><sf:password path="password" cssErrorClass="errors"/></td> </tr> <tr> <td>Email: </td> <td><sf:input path="email" cssErrorClass="errors"/></td> </tr> <tr> <td>CellPhone: </td> <td><sf:input path="cellphone" cssErrorClass="errors"/></td> </tr> </table><br /> <input type="submit" value="Register"/> </sf:form> </body> </html>
最終效果如下:
二、文件上傳
在Spring中,文件上傳很簡單,只需要3步即可。
1、如果我們配置的DispartcherServlet繼承了AbstractAnnotationConfigDispatcherServletInitializer的話,重載customizeRegistration()方法來配置multipart的具體細(xì)節(jié)。
@Override protected void customizeRegistration(ServletRegistration.Dynamic registration) { //限制上傳文件的大小不超過2MB,整個(gè)請求不超過4M,所有上傳的文件都要寫到磁盤中 registration.setMultipartConfig(new MultipartConfigElement("/tmp/uploads", 2097152, 4194304, 0)); }
2、配置multipart解析器。
//配置multipart解析器 @Bean public MultipartResolver multipartResolver() throws IOException { return new StandardServletMultipartResolver(); }
3、處理multipart請求。對于用戶上傳的文件等信息,可以用byte[]數(shù)組來表示,但更推薦Spring提供的MultipartFile接口。它提供了更多功能,比如獲取文件名、文件大小、文件類型等。
@RequestMapping(value = "/{username}", method = RequestMethod.POST) public String showUserInfo(@RequestPart("icon") MultipartFile icon) throws IOException { icon.transferTo(new File("/Users/pingping/Projects/IdeaProjects/spring/register/src/main/webapp/uploads/" + icon.getOriginalFilename())); return "user"; }
transferTo(File dest)方法: 將文件寫入到系統(tǒng)中。
寫個(gè)頁面測試,看指定的文件目錄下文件是否已上傳成功。
<form method="post" enctype="multipart/form-data"> <label>上傳頭像圖片?</label> <input type="file" name="icon" accept="image/jpeg, image/png" value="選擇文件"/> <button type="submit">確定</button> </form>
1、參考文獻(xiàn):Spring實(shí)戰(zhàn)(第4版)。
2、github地址:https://github.com/everseeker0307/register。
以上所述是小編給大家介紹的Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗(yàn)證、文件上傳實(shí)例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
java報(bào)錯(cuò):找不到或無法加載主類的解決方法簡單粗暴
本文主要介紹了java報(bào)錯(cuò):找不到或無法加載主類的解決方法簡單粗暴,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01Java 無參數(shù)構(gòu)造函數(shù)的應(yīng)用
本篇文章主要介紹了Java 無參數(shù)構(gòu)造函數(shù)的應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04將springboot項(xiàng)目生成可依賴的jar并引入到項(xiàng)目中的方法
SpringBoot項(xiàng)目默認(rèn)打包的是可運(yùn)行jar包,也可以打包成不可運(yùn)行的jar包,本文給大家介紹將springboot項(xiàng)目生成可依賴的jar并引入到項(xiàng)目中的方法,感興趣的朋友一起看看吧2023-11-11線程局部變量的實(shí)現(xiàn)?ThreadLocal使用及場景介紹
這篇文章主要為大家介紹了線程局部變量的實(shí)現(xiàn)?ThreadLocal使用及場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01mybatisplus 的SQL攔截器實(shí)現(xiàn)關(guān)聯(lián)查詢功能
大家都知道m(xù)ybatisplus不支持關(guān)聯(lián)查詢,后來學(xué)習(xí)研究發(fā)現(xiàn)mybatisplus的SQL攔截器可以實(shí)現(xiàn)這一操作,下面小編給大家分享我的demo實(shí)現(xiàn)基本的關(guān)聯(lián)查詢功能沒有問題,對mybatisplus關(guān)聯(lián)查詢相關(guān)知識感興趣的朋友一起看看吧2021-06-06