多语言展示
当前在线:1565今日阅读:60今日分享:41

SpringBoot数据验证处理

SpringBoot数据验证错误处理1SpringBoot部署:profile配置2SpringBoot如何读取资源文件
工具/原料
1

springboot

2

intellij idea

方法/步骤
1

在之前的程序里面如果一旦出现了偶无之后就会出现一堆的大白板,这个白板会有一些错误信息(虽然这些错误信息你可能看不懂,但是这些错误信息依然要告诉用户)。在springboot里面针对于错误的处理一共提供有三种方式:数据验证的错误、错误页指派以及全局异常的处理。数据验证现在假设说要进行表单信息提交,肯定需要有一个表单,而后这个表单要将数据提交到VO类中,所以现在的基本实现如下:1、建立一个Member类:package com.gwolf.vo;import java.util.Date;public class Member implements java.io.Serializable{    private String mid;    private String name;    private Integer age;    private Date birthday;    private Double salary;    public String getMid() {        return mid;    }    public void setMid(String mid) {        this.mid = mid;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    @Override    public String toString() {        return 'Member{' +                'mid=' + mid +                ', name='' + name + '\'' +                ', age=' + age +                ', birthday=' + birthday +                ', salary=' + salary +                '}';    }    public Double getSalary() {        return salary;    }    public void setSalary(Double salary) {        this.salary = salary;    }}

2

由于此时的程序之中需要进行日期的转换处理操作,那么就需要为其做一个转换处理的格式配置,修改AbstractBaseController类,追加如下的转换绑定。package com.gwolf.util.controller;import org.springframework.beans.propertyeditors.CustomDateEditor;import org.springframework.context.MessageSource;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.InitBinder;import javax.annotation.Resource;import java.text.SimpleDateFormat;import java.util.Locale;public abstract class AbstractBaseController {    @Resource    private MessageSource messageSource;//自动注入此资源对象        public String getMessage(String key,String ...args) {        return this.messageSource.getMessage(key,args,                Locale.getDefault());    }        @InitBinder    public void initBinder(WebDataBinder binder) {        SimpleDateFormat simpleDateFormat = new SimpleDateFormat('yyyy-MM-dd');                binder.registerCustomEditor(java.util.Date.class,                new CustomDateEditor(simpleDateFormat,true));    }}

3

建立一个MemberController程序类,负责实现Member的控制层处理操作。package com.gwolf.controller;import com.gwolf.util.controller.AbstractBaseController;import com.gwolf.vo.Member;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class MemberController extends AbstractBaseController{    @RequestMapping(value='/member_add_pre', method = RequestMethod.GET)    public String memberAddPre() {        return 'member_add';    }    @RequestMapping(value='/member_add', method = RequestMethod.POST)    @ResponseBody    public Object memberAdd(Member member) {        return member;    }}

4

编写一个页面进行用户的表单填写(在src/main/view/templates)下建立memeber_add.html。            SpringBoot模板渲染                           

        用户邮箱:
        用户年龄:
        用户工资:
        用户生日:
                   

5

现在访问地址:http://localhost:8080/member_add_pre。

6

此时的代码只是一个最为普通的处理操作,但是这个时候对于该程序也是存在有如下问题的。1、如果某些数据没有输入,则内容为null,如果要进行严格控制,这些null不应该存在。2、某些数据需要进行格式验证,例如:用户名应该是邮箱,这个信息应该进行邮箱验证。所以现在如果要想进行这些验证,springboot里面有默认的支持,只不过这种支持未必是最好的,在springboot里面为了方便用户编写验证,专门提供有一个hibernate-validation.jar工具包,这个工具包是有hibernate开发框架提供的。

7

如果要想进行验证,那么首先要解决的问题必须是错误的提示信息问题,而在springboot里面对于错误信息的保存,都要求其保存在ValidationMessages.properties文件里面,在“src/main/resouces”目录中建立此文件;

8

一个表单就需要编写这么多的配置项, 那么如果要有几百个表单呢?这样的配置项太可怕了,所以最好的数据检测还是利用拦截器处理最合适。修改Member.java程序类,追加验证的处理方式:package com.gwolf.vo;import org.hibernate.validator.constraints.Email;import javax.validation.constraints.Digits;import javax.validation.constraints.NotNull;import java.util.Date;public class Member implements java.io.Serializable{    @NotNull(message = '{member.mid.notnul}')    @Email(message = '{member.mid.email.error}')    private String mid;    private String name;    @NotNull(message = '{member.age.notnull.error}')    @Digits(message = '{member.age.digits.error}',integer = 3,fraction = 0)    private Integer age;    private Date birthday;    private Double salary;    public String getMid() {        return mid;    }    public void setMid(String mid) {        this.mid = mid;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    @Override    public String toString() {        return 'Member{' +                'mid=' + mid +                ', name='' + name + '\'' +                ', age=' + age +                ', birthday=' + birthday +                ', salary=' + salary +                '}';    }    public Double getSalary() {        return salary;    }    public void setSalary(Double salary) {        this.salary = salary;    }}

9

修改MemberController类中的add()方法来观察错误信息的显示:package com.gwolf.controller;import com.gwolf.util.controller.AbstractBaseController;import com.gwolf.vo.Member;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.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import javax.validation.Valid;import java.util.Iterator;@Controllerpublic class MemberController extends AbstractBaseController{    @RequestMapping(value='/member_add_pre', method = RequestMethod.GET)    public String memberAddPre() {        return 'member_add';    }    @RequestMapping(value='/member_add', method = RequestMethod.POST)    @ResponseBody    public Object memberAdd(@Valid Member member, BindingResult result) {       if(result.hasErrors()) {           Iterator iterator =  result.getAllErrors().iterator();           while (iterator.hasNext()) {               ObjectError objectError = iterator.next();               System.out.println('[错误信息]' + objectError.getCode() + ','                        + objectError.getDefaultMessage());           }                      return result.getAllErrors();       } else {           return member;       }    }}

推荐信息