(十七)springMvc 对表单提交的日期以及JSON中的日期的参数绑定
前言
springMVC
提供强大的参数绑定功能,使得我们从 request
中获取参数解放出来 ;
前端一般有两种形式提交数据到后台:Ajax
提交表单数据、Ajax
提交JSON
格式数据;
springMvc
也都支持它们的参数绑定;
但是springmvc
也不是什么形式,都能进行绑定的,比如今天要讲的日期类型,就是一个;
今天讲的,日期,都是前端 传字符串形式 的日期,后台使用 java.util.Date
接收的情况;这种情况应该也是最常见的了,毕竟前端一般也不会自己费事的把字符串转成日期,再传给后台;
Ajax
提交表单数据
针对这种情况,在 po
类的 日期字段 上,添加注解 @DateTimeFormat(pattern="yyyy/MM/dd")
根据自己情况,写具体的日期格式;
上面的仅仅对一个 po
类有效,如果你有很多 po
类,都有日期,则直接写一个日期转换类,然后注册到 springMvc
的配置文件里面,一劳永逸 ;
转换类如下:
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 完成日期绑定,全局的 ,替换掉 @DateTimeFormat(pattern = "yyyy/MM/dd")
*
* @author yiaz
* @date 2019年1月15日10:05:36
*/
public class DateConverter implements Converter<String, Date> {
/**
* 日期转换类
*/
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-MM-dd");
@Override
public Date convert(String source) {
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
// 转换失败,就返回 null ;
return null;
}
}
注册到配置文件里面
<!--配置 自定义 参数绑定(日期转换)-->
<bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean" id="conversionService">
<!--写上自定义的转换器-->
<property name="converters">
<list>
<!--日期 转换 -->
<bean class="cn.hyc.utils.DateConverter"/>
</list>
</property>
</bean>
<!--添加到 MVC 注解里面-->
<mvc:annotation-driven validator="validator" conversion-service="conversionService">
这样就 OK 了
Ajax
提交JSON
格式数据
在使用 @Request 进行 JSON 数据参数绑定的时候,对日期,需要另作操作;
否则就会报 400 bad request
,请求也不会进后台方法;
在 po
类的 日期字段的get
方法 上 添加 @JsonFormat(pattern="yyyy/MM/dd")
;
解决输出JSON乱码的问题
我们发现即使,我们在 web.xml
中配置了解决乱码的拦截器,但是输出JSON
到前台的时候,JSON
中的中文还会乱码 ;
这与我们配置的过滤器无关了,我 猜测 是在JSON
转换器内部,它默认了ISO-8859
编码,导致过滤器在拿到数据的时候,就已经是乱码的数据了。它再使用UTF8
编码,最终也还是乱码,除非它能智能的先ISO-8859
解码,再UTF8
编码。
为了解决这个问题,我们需要在springMvc.xml
中的 MVC
注解标签中配置JSON
转换器,制定编码为UTF8
;
<mvc:annotation-driven validator="validator" conversion-service="conversionService">
<mvc:message-converters>
<!-- 处理请求返回json字符串的中文乱码问题 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
控制JSON输出日期格式
默认JSON
对日期的转换是个毫秒数,距离 1970-01-01
的毫秒数,比如:187982355421
这样的long
数字 ;
而我们显然不想要这样的数据,我们想要 2019-12-12
、2008/08/08
这样的格式;
不同的 JSON
对这方面的实现不一样,博主使用的是 阿里 的 fastJson
,使用 @JSONField(format = "yyyy/MM/dd")
注解,在 po
类的日期字段上,即可控制输出的JSON
中的日期格式 ;
小记
注意哦,对日期进行绑定的时候,JSON 是在 字段 get 方法
上添加注解,表单是在 字段
上添加注解!
最后在附加一点;
上面的方法,都是前台传来 JSON
,然后转成对象,指定 JSON
中的日期格式,以便正确的转换日期对象;
如果反过来呢,对象转成JSON
,直接转换的话 data
类型,就会被转成 183138913131
这样long
类型的一串数字,我们也可以指定转成 JSON
串中 data
的格式:@JSONField(format = "yyyy-MM-dd")
后记:
/**
* JSON -> 对象,指定JSON 中日期格式,以便转成对象
*/
@DateTimeFormat(pattern = "yyyy/MM/dd")
/**
* 对象 -》 JSON 指定转换以后的字符串中日期对象的格式
*/
@JSONField(format = "yyyy-MM-dd")
private Date newsTime;
(十七)springMvc 对表单提交的日期以及JSON中的日期的参数绑定的更多相关文章
- php form表单提交时,action url中参数无效的解决方法
表单提交时get方式的一个错误 <form class="form-inline pull-right" method="get" action=&quo ...
- 如何使用AngularJS对表单提交内容进行验证
AngularJS是一款优秀的前端JS框架,已经被用于Google的多款产品当中.它有着诸多特性,最为核心的是:MVC.模块化.自动化双向数据绑定.语义化标签.依赖注入等……使用它可以大大减少书写代码 ...
- springmvc 表单提交
Spring MVC自带的表单标签比较简单,很多时候需要借助EL和JSTL来完成. 下面是一个比较简单的表单提交页面功能: 1.User model package com.my.controller ...
- PHP对表单提交特殊字符的过滤和处理
PHP关于表单提交特殊字符的处理方法做个汇总,主要涉及htmlspecialchars/addslashes/stripslashes/strip_tags/mysql_real_escape_str ...
- Jquery表单提交后获取返回Json值
1.给form添加id值: <form action="/News/SaveMessage" method="post" accept-charset=& ...
- JSP将表单提交并在本页中显示
代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8& ...
- springMvc返回Json中自定义日期格式
(一)输出json数据 springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点: 1.使用mvc:annotation-driven 2.在依赖管理中添加ja ...
- JSON中的日期格式化
Json字符串中的日期格式化函数 ConvertJsonDate: function (jd) { var d = new Date(parseInt(jd.replace("/Date(& ...
- 【教训】 form表单提交时,action url中参数无效
今天提交一个表单,内容参考如下: <form action="add.php?a=123&b=456"> <input type="hi ...
随机推荐
- 【洛谷】P1275 魔板(暴力&思维)
题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状态.操作的方式有两 ...
- Bootstrap select多选下拉框实现代码
前言 项目中要实现多选,就想到用插件,选择了bootstrap-select. 附上官网api链接,http://silviomoreto.github.io/bootstrap-select/. 没 ...
- GO语言网络编程
socket编程 Socket是BSD UNIX的进程通信机制,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.Socket可以理解为TCP/IP网络的API,它 ...
- python 两个字典对比
def commir_two_dict(dictone,dicttwo): pass_num=0 fail_num=0 try: for i in dictone.keys(): if i in di ...
- Oracle备份的几种方式
这里使用Oracle 12C来大概演示说明一下rman的基本用法,这里不会深入讨论,因为本人也只是刚刚才接触,只是结合了网上的一些文章以及自己的实践来总结并拿出来大家学习,谢谢 目录 一.关于备份与恢 ...
- GWAS 全基因组关联分析 | summary statistic 概括统计 | meta-analysis 综合分析
有很多概念需要明确区分: 人有23对染色体,其中22对常染色体autosome,另外一对为性染色体sex chromosome,XX为女,XY为男. 染色体区带命名:在标示一特定的带时需要包括4项:① ...
- Spring AOP设计
Spring IOC设计到的设计模式: 工厂模式,模板方法模式,单例模式 Spring AOP涉及到的设计模式: 工厂模式,代理模式 1.Spring AOP目标 将分散在程序各处的横切关注点剥离出来 ...
- Linux中进程的几种状态
linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态. Linux进程状态:R (TASK_RUNNING),可执行状态. 只有在该状 ...
- The Art of Picking Intel Registers Intel寄存器的艺术
https://www.swansontec.com/sregisters.html I wrote this article for an online magazine called Scene ...
- Leetcode: Rotated Digits
X is a good number if after rotating each digit individually by 180 degrees, we get a valid number t ...