详细解读_SpringMvc类型转换&数据格式化&数据验证

简介: 详细解读_SpringMvc类型转换&数据格式化&数据验证

1.类型转换器

Spring MVC 框架的 Converter<S,T> 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型。 开发者在实际应用中使用框架内置的类型转换器基本上就够。

在日常的企业开发需求中,我们输入文本框的内容全部都是字符串类型,但是在后端处理的时候我们可以用其他基本类型来接受数据,也可以使用实体类来接受参数,这个是怎么完成的呢?就是通过SpringMVC提供的类型转换器,SpringMVC内部提供了非常丰富的类型转换器的支持.

对于自己构造类型转换器,需要做以下 5 件事:

1.创建实体类。

2.创建控制器类。

3.创建自定义类型转换器类。

4.注册类型转换器。

5.创建相关视图

这里不再展示,感兴趣的可以自己去了解一下


2.数据格式化

Spring 提供了两个可以用于格式化数字,日期和时间的注解@NumberFormat和 @DateTimeFormat,这两个标签可以用于javabean的属性或方法参数上。

@NumberFormat可以用来格式化任何的数字的基本类型(如int,long)或 java.lang.Number的实例(如 BigDecimal, Integer)。


@DateTimeFormat可以用来格式 化java.util.Date、java.util.Calendar和

java.util.Long类型.


要指定数字或日期/时间类型的属性,只需要在其上添加 @NumberFormat或 @DateTimeFormat注解可以了。


DateTimeFormat,互斥属性: iso。类型为DateTimeFormat.ISO

DateTimeFormat.ISO.DATE: 格式yyyy-MM-dd。

DateTimeFormat.ISO.DATE_TIME:格式yyyy-MM- dd HH:mm:ss .SSSZ。

DateTimeFormat.ISO.NONE: 表示不使用ISO格 式的时间。


NumberFormat pattern。

类型为String,使用自定义的数字格式化字符串,“##,###.##”,style。

类型为NumberFormat.Style,常用值:

1.Style.NUMBER正常数字类型

2.Style.PERCENT百分数类型

3.Style.CURRENCY 货币类型


需要将实现类改为:FormattingConversionServiceFactoryBean 才可以同时支持自定义类型转换器和格式化

<bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean" id="conversionService">
    </bean>


例子:

实体类对变量实现:

    private Integer id;
    private String username;
    @DateTimeFormat(pattern ="yyyy-MM-dd")
    private Date birthday;
    @NumberFormat(style = NumberFormat.Style.CURRENCY)
    private Double balance;
    private String[] hobbies;
    @NumberFormat(pattern = "#,###.##")
    private Double salary;
    @NumberFormat(style = NumberFormat.Style.PERCENT)
    private Double taskCount;

ab07b2f03c5440278f08f66cb4411e81.png


3.数据校验

一般情况下我们会在前端页面实现数据的校验,但是大家需要注意的 是前端校验会存在数据的不安全问题,因此一般情况下我们都会使用前端校验 +后端校验的方式,这样的话既能够满足用户的体验度,同时也能保证数据的安 全,下面来说一下在springmvc中如何进行后端数据校验。

JSR303是 Java 为 Bean 数据合法性校验提供的标准,通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规 则,并通 j过标准的验证接口对 Bean 进行验证。 Hibernate Validator 实现了JSR349验证注解规范的技术 JSR303:

spring中拥有自己的数据校验框架,同时支持JSR303标准的校验框 架,可以在通过添加注解的方式进行数据校验。在spring中本身没有提供 JSR303的实现,需要导入依赖的包。


在maven仓库中导入相关依赖

5ecef7631c8a49f08a529e0da6ec3ae6.png


示例:

    @NotNull(message = "id不能为空")
    @Min(value=1,message = "id必须大于0")
    private Integer id;
    @NotEmpty(message = "用户名不能为空")
    @Length(min = 4,max = 8,message = "用户名的长度必须在{min}和{max}位之间")
    @Pattern(regexp="^[0-9a-zA-Z]+$",message = "用户名只能输入0-9或者a-z")
    private String username;
    @Past(message = "您难道穿越了吗?")
    @DateTimeFormat(pattern="yyyy/MM/dd")
    private Date birthday;
    @NumberFormat(style = NumberFormat.Style.CURRENCY )   //货币
    private Double balance;   //余额  ¥5000
    private String[] hobbies;
    @NumberFormat(pattern = "#,###.##")
    @Range(min = 2000,max = 1000000,message = "工资必须在{min}和{max}之间")    //Size的范围是int 不能用于验证Double
    private Double salary; //工资  10,000.00
    @Range(min=0,max=100,message = "任务完成度必须在{min}和{max}之间")        //Range的范围是Long所以,Range可以控制的范围更大
    @NumberFormat(style = NumberFormat.Style.PERCENT)  /*不加%会 *100来显示   加上会按你提交精度来显示*/
    private Double taskCount;// 任务完成百分比 90%

032ee126155b417f881c065d6a43fde4.png



4.Springmvc form标签

自动绑定,自动回显数据, 如果是新增的情况下也需要保证有该标签所需的对象 Form标签

  1. 支持全部http请求方法 比如method=”put” put\delete 提交方式
  2. 数据自动回显:需要使用modelAttribute指定数据的对象
  3. 使用path来双向绑定属性
  4. 动态数据绑定:Select 、 checkboxes、 radiobottons、都可以使用Items 制 定数据源 可以是list (当List的泛型是javaBean的时候需要制定itemValue和 itemLabel)、map(不需要制定itemValue和itemLabel)


add.jsp

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:form action="${pageContext.request.contextPath}/form/user" method="post" modelAttribute="user">
    <p>
        id:<form:input path="id"></form:input><form:errors path="id"></form:errors>
    </p>
    <p>
        username:<form:input path="username"></form:input><form:errors path="username"></form:errors>
    </p>
    <p>
        birthday:<form:input path="birthday"></form:input><form:errors path="birthday"></form:errors>
    </p>
    <p>
        balance:<form:input path="balance"></form:input><form:errors path="balance"></form:errors>
    <p>
        salary:<form:input path="salary"></form:input><form:errors path="salary"></form:errors>
    </p>
    <p>
        taskCount:<input type="text" name="taskCount" value="${user.taskCount}">
    </p>
    <p>
        hobbies:
        <form:checkbox path="hobbies" value="唱歌"></form:checkbox>
        <form:label path="hobbies">唱歌</form:label>
        <form:checkbox path="hobbies" value="跳舞"></form:checkbox>
        <form:label path="hobbies">跳舞</form:label>
    </p>
    <p>
        <form:button>提交</form:button>
    </p>
</form:form>


UserControl 控制器类

 @PostMapping("/form/user")
    public String springformAdd(@Valid User user, BindingResult result, Model model) {
        // 判断当前是否出现了错误
        if(result.hasErrors()) {
            return "user/add";
        }
        System.out.println(user);
        return "show";
    }![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/ea66e7374f9146c0a5d0a8352f8897f6.gif)
    @GetMapping("/user/add")
    public String addview(User user){
        return "user/add";
    }
}


相关文章
|
前端开发 Java Spring
springMVC--数据格式化
springMVC--数据格式化
92 0
|
Java Spring
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
277 0
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
|
Java Spring
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(二)
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(二)
162 0
|
前端开发
SpringMVC的类型转换器和数据格式化(九)下
SpringMVC的类型转换器和数据格式化(九)
293 0
SpringMVC的类型转换器和数据格式化(九)下
|
前端开发 Java
SpringMVC的类型转换器和数据格式化(九)中
SpringMVC的类型转换器和数据格式化(九)
171 0
SpringMVC的类型转换器和数据格式化(九)中
SpringMVC的类型转换器和数据格式化(九)上
SpringMVC的类型转换器和数据格式化(九)
243 0
SpringMVC的类型转换器和数据格式化(九)上
|
XML JSON 前端开发
springmvc4整合AJAX使用@ResponseBody注解返回JSON数据格式
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/53433325   ...
1272 0
|
容器 前端开发
SpringMVC 中 数据格式化
FormattingConversionServiceFactoryBean内部已经注册了: - NumberFormatAnnotationFormatterFactroy:支持对数字类型的属性使用@NumberFormat注解。 - JodaDateTimeFormatAnnotationFormatterFactroy:支持对日期类型的属性使用@DataTime
1432 0
|
前端开发 Java Spring
springMVC4(11)使用注解完成数据格式化
<div class="markdown_views"> <h1 id="需求实例引入">需求实例引入</h1> <p>在实际开发中,我们会常常遇到需要对日期格式、数值格式进行转换的需求。在spring中,我们可以轻松通过注解的方式完成对数据的格式化处理,比如现在有个User POJO类: <br> package com.mvc.model;</p> <pre cla
2768 0
|
6月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】