當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot 数据验证错误处理
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot 数据验证错误处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在之前的程序里面如果一旦出現了錯誤之后就會出現一堆大白板,這個白板會有一些錯誤信息(雖然這些錯誤信息你可能看不懂,但是這些錯誤信息依然要告訴給用戶).在SpringBoot里面針對于錯誤的處理一共提供有三種方式:數據驗證的錯誤,錯誤頁的指派以及全局異常的處理。2.1 數據驗證現在假設說要進行表單信息提交,肯定需要有一個表單,而后這個表單要將數據提交到VO類中,所以現在的基本實現如下:1、建立一個Member.java 的VO類:
package com.microboot.vo;import java.io.Serializable;
import java.util.Date;@SuppressWarnings("serial")
public class Member implements Serializable {private String mid;private Integer age;private Double salary;private Date birthday;settter/getter 略掉}
2、建立一個MemberController程序類,負責實現Member的控制層處理操作.package com.microboot.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import com.microboot.util.controller.AbstractBaseController;
import com.microboot.vo.Member;@Controller
public class MemberController extends AbstractBaseController{// 增加前的準備操作路徑@RequestMapping(value="/addPre",method=RequestMethod.GET)public String addPre() {return "member_add";}@RequestMapping(value="/add",method=RequestMethod.POST)@ResponseBodypublic Object add(Member vo) {return vo;}}
3、編寫一個頁面進行用戶的表單填寫(src/main/templates下建立):member_add.html<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>SpringBoot模板渲染</title><link rel="icon" type="image/x-icon" href="/images/favicon.ico" /><meta http-equiv="Content-Type" content="text/html;charse=UTF-8">
</head>
<body><form action="add" method="post">用戶郵箱:<input type="text" name="mid" value="leon.sun@qq.com"/><br/>用戶年齡:<input type="text" name="age" value="16"/><br/>用戶工資:<input type="text" name="salary" value="500000"/><br/>用戶生日:<input type="text" name="birthday" value="2010-10-10"/><br/><input type="submit" value="提交" /><input type="reset" value="重置" /></form>
</body>
</html>
2、由于此時的程序之中需要進行日期的轉換處理操作,那么就需要做一個轉換處理的格式配置,修改AbstractBaseController類,追加如下的轉換操作綁定:package com.microboot.util.controller;import java.text.SimpleDateFormat;
import java.util.Locale;import javax.annotation.Resource;import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;public abstract class AbstractBaseController {// 自動注入此資源的對象@Resourceprivate MessageSource messageSource;public String getMessage(String key, String ...args) {return this.messageSource.getMessage(key, args,Locale.getDefault());}@InitBinderpublic void initBinder(WebDataBinder binder) { // 在本程序里面需要針對于日期格式進行處理// 首先建立一個可以將字符串轉換為日期的工具程序類SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;// 明確的描述此時需要注冊一個日期格式的轉化處理程序類binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(sdf, true));}}
5、此時的代碼只是一個最為普通的處理操作,但是這個時候對于該程序也是存在如下問題的:如果某些數據沒有輸入,則內容是null;某些數據需要進行格式驗證,例如:用戶名應該是郵箱,這個信息應該進行郵箱驗證;所以現在如果要想進行這些的驗證, SpringBoot里面有默認的支持,只不過這種支持未必是最好的,
在SpringBoot 里面為了方便用戶編寫驗證專門提供有一個 hibernate-validation.jar 工具包,
這個工具包是由 hibernate 開發框架提供的。
6、 如果要想進行驗證,那么首先要解決的問題就必須是錯誤的提示信息問題,而在SpringBoot里面對于
錯誤信息的保存,都要 求其保存在ValidationMessages.properties文件,在“src/main/resources”
目錄中建立此文件;ValidationMessages.propertiesmember.mid.notnull.error=用戶名不允許為空!
member.mid.email.error=用戶名的注冊必須輸入正確的郵箱!
member.mid.length.error=用戶名的格式錯誤!
member.age.notnull.error=年齡不允許為空
member.age.digits.error=年齡必須是合法數字!
member.salary.notnull.error=工資不允許為空!
member.salary.digits.error=工資必須是合法數字!
member.birthday.notnull.error=生日不允許為空!提示:你一個表單就需要編寫這么多的配置項,那么如果要有幾百個表單呢?這樣的配置項太可怕了,
所以最好的數據檢測還是利用攔截器處理最合適。
7、 修改 Member.java 程序類追加驗證的處理方式:package com.microboot.vo;import java.io.Serializable;
import java.util.Date;import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;@SuppressWarnings("serial")
public class Member implements Serializable {@NotNull(message="{member.mid.notnull.error}")@Email(message="{member.mid.email.error}")@Length(min=6,message="{member.mid.length.error}")private String mid ;@NotNull(message="{member.age.notnull.error}")@Digits(integer=3,fraction=0,message="{member.age.digits.error}")private Integer age ;@NotNull(message="{member.salary.notnull.error}")@Digits(integer=20,fraction=2,message="{member.salary.digits.error}")private Double salary ;@NotNull(message="{member.birthday.notnull.error}")private Date birthday ;}
8、 修改 MemberController 類中的 add()方法來觀察錯誤信息的顯示:package com.microboot.controller;import java.util.Iterator;import javax.validation.Valid;import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import com.microboot.util.controller.AbstractBaseController;
import com.microboot.vo.Member;@Controller
public class MemberController extends AbstractBaseController{// 增加前的準備操作路徑@RequestMapping(value = "/add", method = RequestMethod.POST)@ResponseBodypublic Object add(@Valid Member vo, BindingResult result) {// 現在表示執行的驗證出現錯誤if (result.hasErrors()) { // 獲取全部錯誤信息Iterator<ObjectError> iterator = result.getAllErrors().iterator(); while (iterator.hasNext()) {ObjectError error = iterator.next() ; // 取出每一個錯誤System.out.println("【錯誤信息】code = " + error.getCode() + ",message = " + error.getDefaultMessage());}return result.getAllErrors() ;} else {return vo;}}@RequestMapping(value = "/addPre", method = RequestMethod.GET)public String addPre() { // 增加前的準備操作路徑return "member_add";}}
對于此類的驗證大家理解即可,不需要將其作為重點,但是需要清楚,默認情況下 SpringBoot 提供的數據
驗證需要通過注解 以及一系列的資源文件進行定義后才可以使用,而且所有的錯誤都必須用戶自己來處理,
這一點的設計不如直接編寫具體的反射攔截器方便。
?
總結
以上是生活随笔為你收集整理的SpringBoot 数据验证错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot profile配置
- 下一篇: SpringBoot 配置错误页