springMvc返回Json中自定义日期格式
(一)输出json数据
springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点:
1.使用mvc:annotation-driven
2.在依赖管理中添加jackson-mapper-asl
1 <dependency>
2 <groupId>org.codehaus.jackson</groupId>
3 <artifactId>jackson-mapper-asl</artifactId>
4 <version>${jackson.version}</version>
5 </dependency>
3.使用注解@ResponseBody
mvc:annotation-driven默认加载了json转换器,我们添加了上面的依赖包后就可以使用注解@ResponseBody来返回json数据,比如:
1 @RequestMapping("json")
2 @ResponseBody
3 public List<User> userList(ModelMap modelMap){
4 UserExample example = new UserExample();
5 example.createCriteria().andUsernameIsNotNull();
6 List<User> users = userMapper.selectByExample(example);
7 return users;
8 }
(二)格式化json输出的日期格式
上面虽然输出了json,但json的date类型的属性都是long值,像在页面取出是国外的日期格式一样,我们需要加一个格式转换,将日期的格式转换成想要的格式:yyyy-MM-dd。
1.使用@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
在实体类的getter方法上面添加@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 就可以将json的日期格式化。
我第一次尝试总是失败,后来添加完整的依赖包后成功,需要添加如下几个依赖:
1 <!-- json数据 -->
2 <dependency>
3 <groupId>org.codehaus.jackson</groupId>
4 <artifactId>jackson-mapper-asl</artifactId>
5 <version>${jackson.version}</version>
6 </dependency>
7 <dependency>
8 <groupId>com.fasterxml.jackson.core</groupId>
9 <artifactId>jackson-core</artifactId>
10 <version>${jackson.core.version}</version>
11 </dependency>
12 <dependency>
13 <groupId>com.fasterxml.jackson.core</groupId>
14 <artifactId>jackson-databind</artifactId>
15 <version>${jackson.core.version}</version>
16 </dependency>
17
18
19 <properties>
20 <jackson.version>1.9.13</jackson.version>
21 <jackson.core.version>2.4.2</jackson.core.version>
22 </properties>
优点是简单方便,缺点是需要在每个需要的属性的getter方法上面添加。宏观的看比较繁琐,但实际开发中也就一行代码的事情,唯一不好的是mybatis自动生成实体类会覆盖。
2.继承ObjectMapper来实现返回json字符串
参考:http://aokunsang.iteye.com/blog/1878985
在上面的方法中虽然简单方便,但缺点也很明显,自动生成代码会覆盖实体类,而且每个日期属性都要手动添加,实际中日期属性又是普遍必备。因此,大可全局处理,统一格式。这里需要说下,在数据库中的date和timestamp都会被mybatis转换成date对象。至于生日精确到日、时间精确到到秒的格式规范可以让显示层做处理。统一成yyyy-MM-dd HH:mm:ss
MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册一个JsonSerializer<T>。然后在配置文件中注入自定义的ObjectMapper。
2.1编写子类继承ObjectMapper
1 package com.demo.common.util.converter;
2
3 import org.codehaus.jackson.JsonGenerator;
4 import org.codehaus.jackson.JsonProcessingException;
5 import org.codehaus.jackson.map.JsonSerializer;
6 import org.codehaus.jackson.map.ObjectMapper;
7 import org.codehaus.jackson.map.SerializerProvider;
8 import org.codehaus.jackson.map.ser.CustomSerializerFactory;
9
10 import java.io.IOException;
11 import java.text.SimpleDateFormat;
12 import java.util.Date;
13
14 /**
15 * 解决Date类型返回json格式为自定义格式
16 * Created by Administrator on 2016/2/14.
17 */
18 public class CustomJsonDateConverter extends ObjectMapper {
19 public CustomJsonDateConverter(){
20 CustomSerializerFactory factory = new CustomSerializerFactory();
21 factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){
22 @Override
23 public void serialize(Date value,
24 JsonGenerator jsonGenerator,
25 SerializerProvider provider)
26 throws IOException {
27 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
28 jsonGenerator.writeString(sdf.format(value));
29 }
30 });
31 this.setSerializerFactory(factory);
32 }
33 }
2.2配置spring文件
1 <mvc:annotation-driven>
2 <mvc:message-converters>
3 <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
4 <property name="objectMapper" ref="customObjectMapper"></property>
5 </bean>
6 </mvc:message-converters>
7 </mvc:annotation-driven>
8 <bean id="customObjectMapper" class="com.demo.common.util.converter.CustomJsonDateConverter"></bean>
2.3显示层自主决定日期类型长度
这个配置无法和上一个@JsonFormat共同使用。由于全局统一了日期格式,date和datetime以及timestamp都是一个格式,如果生日等date字段需要精简,只能在显示层裁剪。
3.使用内置的日期格式化工具
同样是全局设置json响应的日期格式,但此方法可以和@JsonFormat共存,也就是说可以全局设置一个格式,特定的需求可以使用注解设置。
3.1配置spring文件
<mvc:annotation-driven>
<!-- 处理responseBody 里面日期类型 -->
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
3.2配置特定的date
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
public Date getBirth() {
return birth;
}
3.3最终
注:本文转自http://www.cnblogs.com/woshimrf/p/5189435.html。
springMvc返回Json中自定义日期格式的更多相关文章
- SpringMVC返回Json,自定义Json中Date类型格式
http://www.cnblogs.com/jsczljh/p/3654636.html —————————————————————————————————————————————————————— ...
- SpringMVC返回JSON数据时日期格式化问题
https://dannywei.iteye.com/blog/2022929 SpringMVC返回JSON数据时日期格式化问题 博客分类: Spring 在运用SpringMVC框架开发时,可 ...
- golang中json格式化自定义日期格式
go 的time.Time,在json序列化是默认 2006-01-02T15:04:05Z07:00 的格式,十分不便, encoding/json包在序列化和反序列化的时候分别调用encode.g ...
- ServiceStack.Text json中序列化日期格式问题的解决
标记: ServiceStack.Text,json,序列化,日期 在使用ServiceStack.Text的序列化为json格式的时候,当属性为datetime的时候,返回的是一个new date( ...
- json中的日期格式转换(扩展new date()显示格式)
在java spring mvc 开发过程中,通过json 格式,向前端传递数据,日期格式发生了转变, 在前台数据展示时,要进行一定格式的转换才能正常显示: 我在开发中使用了easy ui 和my ...
- java返回json设置自定义的格式
使用注解@JsonSerialize(using = CustomPriceSerialize.class) 创建自定义的格式化类(可为内部类) /** * 设置默认返回的小数类型(0.01 元) * ...
- MyEclipse 中自定义日期格式
从数据库中读出Data数据: 而想实现的是这样: 解决办法: 1. 在这个类里添加自定义的变量birthf: public abstract class AbstractUsers implement ...
- (十七)springMvc 对表单提交的日期以及JSON中的日期的参数绑定
文章目录 前言 `Ajax`提交表单数据 `Ajax`提交`JSON` 格式数据 解决输出JSON乱码的问题 控制JSON输出日期格式 小记 前言 springMVC 提供强大的参数绑定功能,使得我们 ...
- .Net Core WebApi返回的json数据,自定义日期格式
基本上所有的人都在DateTime类型的字段,被序列化成json的时候,遇到过可恨的Date(1294499956278+0800):但是又苦于不能全局格式化设置,比较难受.以往的方式,要么使用全局的 ...
随机推荐
- wms-ssv数据字典
--------------------------------------------以下,托盘-- dbo.Container --托盘 , "托盘状态", "Con ...
- Layer UI 模块化的用法(转)
此文章适合入门的同学查看,之前因为项目的原因,在网上找了一套Layer UI做的后台管理系统模板,完全不懂LayUI里面的JS用法,看了官方文档和其它资料后才明白怎么去实现模块化这个例子,但是还是感觉 ...
- ActiveMQ - 入门指南
首先需要下载ActiveMQ,下面的链接给我们列出了所有版本: http://activemq.apache.org/download-archives.html 每个版本为不同的OS提供了链接: 公 ...
- http所有请求头在Console中打印
1.目标:将http中的请求头全部打印在Console中 2.基本语句 //1.获得指定的头 String header = response.getHeader("User-Agert&q ...
- ugui之圆角矩形头像实现
这个是参考大神的修改了一下渲染方式实现的,可以去查看原帖的,原贴是圆形头像,原理讲的非常详细 点击这里 我写的这个只支持正方形图片,效果是酱紫的~ 一共三个代码,还需要两个代码,原帖里都有的,我只是修 ...
- 移动端开发:iOS与Android平台上问题列表
要CSS伪类 :active 生效,只需要给 document 绑定 touchstart 或 touchend 事件 <style> a { color: #000; } a:activ ...
- RoadFlow工作流与JUI(DWZ)前端框架的集成
此文只说明RoadFlow前端与JUI的集成,关于程序和接口请参照WebForm或MVC文档. 修改JUI配置文件dwz.frag.xml,此文件一般位于JUI根目录下. 2.修改文件js/dwz.n ...
- AndroidStudio安装教程
Android studio安装与配置 1.首先下载Android studio安装包,可以从http://www.android-studio.org/ 2.下载好该安装包之后,点击进行安装,依次出 ...
- According to TLD, tag fmt:formatDate must be empty, but is not 问题的解决
在执行jsp格式化后报错,检查下代码,发现变成如下的样式: <fmt:formatDate value="${cur.sa_date}" pattern="yyyy ...
- [英中双语] Pragmatic Software Development Tips 务实的软件开发提示
Pragmatic Software Development Tips务实的软件开发提示 Care About Your Craft Why spend your life developing so ...