Spring MVC JSON自己定义类型转换
类型有非常多。这里仅仅用日期为例说明。
在Spring MVC中存在两大类的类型转换,一类是Json。一个是Spring的Binder转换。
JSON:
使用Json转换时,能够例如以下使用:
public class Test {private Date createdate;@JsonSerialize(using = DateYMDHMSJsonSerializer.class)public Date getCreatedate() {return createdate;}@JsonDeserialize(using = DateYMDHMSJsonDeserializer.class)public void setCreatedate(Date createdate) {this.createdate = createdate;}
}
能够看到这里使用了两个Json转换的注解:
第一个@JsonSerialize是转换为字符串。主要是后台传递给前台时的日期格式;
第二个@JsonDeserialize是转换字符串为日期类型。主要是从前台往后台传递时的日期。
两个详细转换类的实现:
/*** Description: 日期转换 - "yyyy-MM-dd HH:mm:ss"* Author: liuzh* Update: liuzh(2014-04-17 10:59)*/
public class DateYMDHMSJsonSerializer extends JsonSerializer<Date>{@Overridepublic void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {try {jsonGenerator.writeString(DateUtil.formatDate(date, DateUtil.DATE_FORMAT_TIME_T));} catch (BusinessException e) {jsonGenerator.writeString(String.valueOf(date.getTime()));}}
}
/*** Description: 日期转换 - "yyyy-MM-dd HH:mm:ss"* Author: liuzh* Update: liuzh(2014-04-17 10:59)*/
public class DateYMDHMSJsonDeserializer extends JsonDeserializer<Date> {@Overridepublic Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {try {return DateUtil.formatStringToDate(jp.getText(), DateUtil.DATE_FORMAT_TIME_T);} catch (BusinessException e) {return new Date(jp.getLongValue());}}
}
当中DateUtil是一个对日期格式转换的工具类,使用的SimpleDateFormat进行转换。
Binder:
这样的类型转换的时候,使用的是Spring的參数绑定,代码例如以下:
/*** Description: 全局类型转换* Author: liuzh* Update: liuzh(2014-05-26 13:08)*/
public class GlobalDataBinder implements WebBindingInitializer {/*** 智能日期转换,针对四种格式日期:* 1.2014-05-26* 2.1401951570548* 3.2014-05-26 00:00* 4.2014-05-26 00:00:00*/private class SmartDateEditor extends PropertyEditorSupport {/*** 依据2014-05-26 00:00:00长度来推断选择哪种转换方式*/@Overridepublic void setAsText(String text) throws IllegalArgumentException {if (text == null || text.length() == 0) {setValue(null);} else {try {if (text.length() == 10) {setValue(DateUtil.formatStringToDate(text, DateUtil.DATE_FORMAT_YYYYMMDD));} else if (text.length() == 13) {setValue(new Date(Long.parseLong(text)));} else if (text.length() == 16) {setValue(DateUtil.formatStringToDate(text, DateUtil.DATE_FORMAT_TIME_R));} else if (text.length() == 19) {setValue(DateUtil.formatStringToDate(text, DateUtil.DATE_FORMAT_TIME_T));} else {throw new IllegalArgumentException("转换日期失败: 日期长度不符合要求!");}} catch (Exception ex) {throw new IllegalArgumentException("转换日期失败: " + ex.getMessage(), ex);}}}/*** 转换为日期字符串*/@Overridepublic String getAsText() {Date value = (Date) getValue();String dateStr = null;if (value == null) {return "";} else {try {dateStr = DateUtil.formatDate(value, DateUtil.DATE_FORMAT_TIME_T);if (dateStr.endsWith(" 00:00:00")) {dateStr = dateStr.substring(0, 10);} else if (dateStr.endsWith(":00")) {dateStr = dateStr.substring(0, 16);}return dateStr;} catch (Exception ex) {throw new IllegalArgumentException("转换日期失败: " + ex.getMessage(), ex);}}}}@Overridepublic void initBinder(WebDataBinder binder, WebRequest request) {//日期格式转换binder.registerCustomEditor(Date.class, new SmartDateEditor());}}
这里对日期类型进行了一些推断来特殊处理。
该类须要在Spring的xml进行配置:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="webBindingInitializer"><bean class="com.easternie.sys.common.GlobalDataBinder"/></property>
</bean>
通过这样的配置之后。Spring就能对日期进行智能转换了。
转载于:https://www.cnblogs.com/ldxsuanfa/p/10479262.html
Spring MVC JSON自己定义类型转换相关推荐
- Spring MVC JSON数据交互(附带实例)
Spring MVC 在数据绑定的过程中需要对传递数据的格式和类型进行转换,它既可以转换 String 等类型的数据,也可以转换 JSON 等其他类型的数据.本节将针对 Spring MVC 中 JS ...
- 玩转spring mvc入参自定义类型转换和格式化
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 概述 最近小胖哥搞了个小程序,有几个spring mvc 接口传递了时间,时间用java 8 ...
- java spring mvc json ajax 优势_SpringMVC后台json数据前台ajax获取不到!!!急求解答!!!...
//后端 @RestController @RequestMapping(value = "/loan") public class LoanApplyController ext ...
- Spring mvc json
@RequestMapping("/testAjax") public @ResponseBody User testAjax(@RequestBody User user){// ...
- Spring MVC框架——Web开发框架
1.MVC设计模式 一般指MVC框架,M(Model)数据模型层,V(View)视图层,C(Controller)控制层. Controller层:获取用户的请求,处理相关业务逻辑,并成功跳转页面,负 ...
- 【Java学习路线之JavaWeb】Spring MVC框架入门教程
文章目录 读者 阅读条件 MVC设计模式简介 JSP+JavaBean Servlet+JSP+JavaBean MVC优缺点 优点 缺点 Spring MVC是什么 Spring MVC优点 第一个 ...
- Spring MVC静态资源处理(转)
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
- Spring MVC静态资源处理
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
- Spring MVC注释
介绍: 从Spring 2.5开始,我们可以使用注释来标记我们的Spring组件. 一种方法是在我们的appConfig.xml中使用<component-scan>标记: <con ...
- 用IDEA开发一个简单的Spring MVC的Hello World程序,表单程序
1.下载Tomcat,并添加如下用户环境变量,并添加CLASSPATH变量 ### CATALINA_BASE F:\apache-tomcat-7.0.90 ### CATALINA_HOME F: ...
最新文章
- 解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”...
- (详细)JAVA使用JDBC连接MySQL数据库(1)- 软件
- 如何在CSDN上快速引用到网页内的局部位置?
- 输入和学生成绩的输出
- goland配置GOPATH入口
- 网络工程中,VLAN到底有什么作用?
- 01数字基带信号及其频谱特性
- 【转】Azure 命令行工具大混战,都是什么,该选哪个?
- 简单分析STM32和51的区别
- 写给即将入行以及刚入行的程序员,你需要注意的几个点,别忽略!
- python的内置函数是什么_python_内置函数
- php 实现 word 转为 图片
- (网络)网络层:IP协议解析、地址管理(IP地址、子网掩码)、路由选择
- matlab创作歌曲——《月半小夜曲》
- linux服务器数据同步,Linux服务器数据定期同步和备份方式
- Unity3D中 使模型变成变透明
- 每日刷题:lightoj-1004 - Monkey Banana Problem
- 企业微信可以统计加班时长吗?如何查看?
- 基于Java实现的贪吃蛇大作战小游戏
- 解决CentOS磁盘空间不足