小仙女讲Springmvc(3)——数据相关

Springmvc会将来自web页面的请求和响应数据与controller中对应的处理方法的入参进行绑定,这个过程就叫做数据绑定。其大致流程为:绑定——数据转换——校验。

数据绑定

数据绑定相关的流程如下:
在这里插入图片描述
(1)SpringMvc主框架将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象。
(2)DataBinder对象调用装配在SpringMvc上下文中的ConversionService组件进行数据类型转换,数据格式化工作,将Servlet中的请求信息填充到入参对象中。
(3)调用Validator组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象。
(4)SpringMvc抽取BindingResult中的入参对象和校验错误对象,将它们赋给处理方法的相应入参。

数据转换

数据转换可以将任意类型转换成另一种类型。应用场景比如:我们在界面输入的时候,输入的是“日期字符串”,可是在数据库中,此字段的类型为Date。这就需要用到数据转换了。可以使用@InitBinder注解来实现。

@InitBinder
public void initBinder(WebDataBinder binder) {
	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	dateFormat.setLenient(false);
	binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
数据校验

数据校验分为客户端校验和服务器端校验。客户端校验是防止用户的误输入,比如一个人的年龄不可能超过150岁,也不可能是负数。服务器校验是为了防止非法用户绕过浏览器,使用http工具直接向后端请求一些非法数据。
我们可以对非空、电子邮件地址、填入的必须为一个数字等进行校验。同样使用注解就可以实现,使用步骤如下。
第一步:在Controller文件中添加@Validated 注解

@Controller
public class FooController {
    @RequestMapping(value="/url.json",method= {RequestMethod.POST})
    @ResponseBody
    @Transactional
    public Result<?> xxmethod(@RequestBody @Validated  XoPO xoPo)     
         throws ParseException, UnsupportedEncodingException {}
}

第二步:在bean上声明需要被校验的字段

@data
public class XoPO{
    
    @validated
    private List<OrderPerson> personList;
    
    @NotNull
    @Size(max=32,message="code is null")
    private String code;

    @NotBlank
    @Size(max=32,message="product is null")
    private String product;
}

列举一下框架提供的校验注解们:

  • JSR提供的校验注解:

@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(regex=,flag=) 被注释的元素必须符合指定的正则表达式

  • Hibernate Validator提供的校验注解:

@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

发布了258 篇原创文章 · 获赞 769 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/qsbbl/article/details/98213475