版权声明:版权归博主全部。转载请带上本文链接。联系方式:abel533@gmail.com https://blog.csdn.net/isea533/article/details/28625071

类型有非常多。这里仅仅用日期为例说明。

在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自己定义类型转换相关推荐

  1. Spring MVC JSON数据交互(附带实例)

    Spring MVC 在数据绑定的过程中需要对传递数据的格式和类型进行转换,它既可以转换 String 等类型的数据,也可以转换 JSON 等其他类型的数据.本节将针对 Spring MVC 中 JS ...

  2. 玩转spring mvc入参自定义类型转换和格式化

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 概述 最近小胖哥搞了个小程序,有几个spring mvc 接口传递了时间,时间用java 8 ...

  3. java spring mvc json ajax 优势_SpringMVC后台json数据前台ajax获取不到!!!急求解答!!!...

    //后端 @RestController @RequestMapping(value = "/loan") public class LoanApplyController ext ...

  4. Spring mvc json

    @RequestMapping("/testAjax") public @ResponseBody User testAjax(@RequestBody User user){// ...

  5. Spring MVC框架——Web开发框架

    1.MVC设计模式 一般指MVC框架,M(Model)数据模型层,V(View)视图层,C(Controller)控制层. Controller层:获取用户的请求,处理相关业务逻辑,并成功跳转页面,负 ...

  6. 【Java学习路线之JavaWeb】Spring MVC框架入门教程

    文章目录 读者 阅读条件 MVC设计模式简介 JSP+JavaBean Servlet+JSP+JavaBean MVC优缺点 优点 缺点 Spring MVC是什么 Spring MVC优点 第一个 ...

  7. Spring MVC静态资源处理(转)

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  8. Spring MVC静态资源处理

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  9. Spring MVC注释

    介绍: 从Spring 2.5开始,我们可以使用注释来标记我们的Spring组件. 一种方法是在我们的appConfig.xml中使用<component-scan>标记: <con ...

  10. 用IDEA开发一个简单的Spring MVC的Hello World程序,表单程序

    1.下载Tomcat,并添加如下用户环境变量,并添加CLASSPATH变量 ### CATALINA_BASE F:\apache-tomcat-7.0.90 ### CATALINA_HOME F: ...

最新文章

  1. 解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”...
  2. (详细)JAVA使用JDBC连接MySQL数据库(1)- 软件
  3. 如何在CSDN上快速引用到网页内的局部位置?
  4. 输入和学生成绩的输出
  5. goland配置GOPATH入口
  6. 网络工程中,VLAN到底有什么作用?
  7. 01数字基带信号及其频谱特性
  8. 【转】Azure 命令行工具大混战,都是什么,该选哪个?
  9. 简单分析STM32和51的区别
  10. 写给即将入行以及刚入行的程序员,你需要注意的几个点,别忽略!
  11. python的内置函数是什么_python_内置函数
  12. php 实现 word 转为 图片
  13. (网络)网络层:IP协议解析、地址管理(IP地址、子网掩码)、路由选择
  14. matlab创作歌曲——《月半小夜曲》
  15. linux服务器数据同步,Linux服务器数据定期同步和备份方式
  16. Unity3D中 使模型变成变透明
  17. 每日刷题:lightoj-1004 - Monkey Banana Problem
  18. 企业微信可以统计加班时长吗?如何查看?
  19. 基于Java实现的贪吃蛇大作战小游戏
  20. 解决CentOS磁盘空间不足

热门文章

  1. ip-sysctl.txt 文件
  2. 常用的物理引擎,图形引擎
  3. “工作5年,存款为0”:那些拼命的人是怎么被拖垮的?
  4. app调用webapi时候出现读取不到session的问题
  5. [ABP开源项目]--vue+vuex+vue-router+EF的权限管理系统
  6. android中的回调简单认识
  7. FZU 2128 最长子串
  8. html5 (个人笔记)
  9. 【NOIP2015】运输计划
  10. 将Excel文件数据导入到SqlServer数据库的三种方案