Spring mvc mvc返回json数组组中的日期怎么格式化?

Spring MVC返回json数据的方式有以下几种:
(1)直接 PrintWriter 输出
(2)使用 JSP 视图
(3)使用Spring内置的支持
本文说明的是使用Spring内置的功能。
Spring MVC返回json数据的方式有以下几种:
& & (1)直接 PrintWriter 输出
& & (2)使用 JSP 视图
& & (3)使用Spring内置的支持
本文说明的是使用Spring内置的功能。
以下为3.1之前的配置:
&bean&class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"&&&
&&property&name="messageConverters"&&&
&&&list&&&
&&&&bean&&
&&&&class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&/&&&
&&&/list&&&
&&/property&&&
以下为3.1的配置:
spring mvc 3.1之后使用RequestMappingHandlerMapping和RequestMappingHandlerAdapter
替代了原有的DefaultMethodHandlerMapping和&AnnotationMethodHandlerAdapter。
所以,3.1的返回json配置可以使用如下配置:
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"&&
&&&&&&&&p:ignoreDefaultModelOnRedirect="true"&&&&
&&&&&&&&&&&&&property&name="messageConverters"&&&
&&&&&&&&&&&&&&&&&list&&&
&&&&&&&&&&&&&&&&&&&&&bean&class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/&&&
&&&&&&&&&&&&&&&&&/list&&&
&&&&&&&&&&&&&/property&&&
&&&&&&&&&/bean&&&
// WEB-INF/lib 中添加
jackson-mapper-asl-1.6.4.jar
jackson-core-asl-1.6.4.jar
// Controller 中&使用:@ResponseBody 标注方法,该方法返回Java对象(支持复杂对象),
& & & & & & &@ResponseBody
public&User&getUser(User&u){&&
&&&&return&u;&&
{color:black}}&&
MappingJacksonHttpMessageConverter 会将对象转换为 JSON 输出
注意:当springMVC-servlet.xml中使用&mvc:annotation-driven /&时,如果是3.1之前已经默认注入AnnotationMethodHandlerAdapter,3.1之后默认注入RequestMappingHandlerAdapter,只需加上上面提及的jar包即可!
注意:默认情况下MappingJacksonHttpMessageConverter 会设置content为application/json,在IE9下返回会出现提示下载的现象,出现这种情况可以手动指定头信息为"text/html",或者"/"(所有,不确定就设置为这个)。如果是手动注入RequestMappingHandlerAdapter 可以这样设置
&&&&class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"&&
&&&&p:ignoreDefaultModelOnRedirect="true"&&&
&&&&&property&name="messageConverters"&&&
&&&&&&&&&list&&&
&&&&&&&&&&&&&bean&&
&&&&&&&&&&&&&&&&class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&&
&&&&&&&&&&&&&&&&p:supportedMediaTypes="/"&/&&&
&&&&&&&&&/list&&&
&&&&&/property&&&
&如果是采用mvc:annotation-driven标签 可以这样注入信息
&mvc:annotation-driven&&&
&&&&&&&&&mvc:message-converters&register-defaults="true"&&&
&&&&&&&&&&&&&bean&&
&&&&&&&&&&&&&&&&&&&&class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&&
&&&&&&&&&&&&&&&&&&&&p:supportedMediaTypes="/"&/&&&
&&&&&&&&&/mvc:message-converters&&&
&&&&&/mvc:annotation-driven&&
注入的message-converters优先级高于默认注入的json转换器。
后方可回复
如果没有账号可以
一个帐号。
该话题的其他文章
该作者的其他文章
欢迎来到普元技术社区。
普元是国内领先的软件基础平台与解决方案提供商,主要面向大中型企业、政府机构及软件开发商提供SOA、大数据、云计算三大领域的软件基础平台及解决方案,用以满足上述组织信息化建设对关键技术的需求,帮助上述组织的业务在云计算和移动互联时代向数字化转型。普元系国家规划布局内重点软件企业,并是国际标准组织OASIS成员、SOA国际标准SCA/SDO的主要参与制定者、全国信标委SOA分技术委员会SOA与Web服务工作组副组长单位、全国信标委云计算工作组成员单位。Java Web程序中利用Spring框架返回JSON格式的日期
作者:hellostory
字体:[ ] 类型:转载 时间:
这里我们来介绍一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat时要引入一个类库joda-time-版本.jar,否则会无法访问相应路径
返回Json时格式化日期Date
第一步:创建CustomObjectMapper类
* 解决SpringMVC使用@ResponseBody返回json时,日期格式默认显示为时间戳的问题。需配合&mvc:message-converters&使用
@Component("customObjectMapper")
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
CustomSerializerFactory factory = new CustomSerializerFactory();
factory.addGenericMapping(Date.class, new JsonSerializer&Date&() {
public void serialize(Date value, JsonGenerator jsonGenerator,
SerializerProvider provider) throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(value));
this.setSerializerFactory(factory);
第二步:配置如下:
&mvc:annotation-driven&
&mvc:message-converters&
&bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&
&property name="objectMapper" ref="customObjectMapper"&&/property&
&/mvc:message-converters&
&/mvc:annotation-driven&
效果如下:
进阶:返回自定义格式日期
使用@ResponseBody时返回json字符串的日期格式。Date类型属性默认返回一个Long型的时间戳,怎样能够返回自定义的日期格式?
解决方案:目前有两种方式实现,
1、局部修改(网上较多,但不推荐);
继承Jackson的抽象类:JsonSerializer&T&,然后在javabean的属性getter()上添加注解@JsonSerialize即可实现。
代码如下:
import java.io.IOE
import java.text.SimpleDateF
import java.util.D
import org.codehaus.jackson.JsonG
import org.codehaus.jackson.JsonProcessingE
import org.codehaus.jackson.map.JsonS
import org.codehaus.jackson.map.SerializerP
* @description 自定义返回JSON 数据格中日期格式化处理
public class CustomDateSerializer extends JsonSerializer&Date& {
public void serialize(Date value,
JsonGenerator jsonGenerator,
SerializerProvider provider)
throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(value));
使用方式:&
@JsonSerialize(using = CustomDateSerializer.class)
public Date getCreateDate() {
return createD
2、全局修改(强烈推荐):
MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册一个JsonSerializer&T&。然后在配置文件中注入自定义的ObjectMapper。
代码如下:
import java.io.IOE
import java.text.SimpleDateF
import java.util.D
import org.codehaus.jackson.JsonG
import org.codehaus.jackson.JsonProcessingE
import org.codehaus.jackson.map.JsonS
import org.codehaus.jackson.map.ObjectM
import org.codehaus.jackson.map.SerializerP
import org.codehaus.jackson.map.ser.CustomSerializerF
* @description 解决Date类型返回json格式为自定义格式
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper(){
CustomSerializerFactory factory = new CustomSerializerFactory();
factory.addGenericMapping(Date.class, new JsonSerializer&Date&(){
public void serialize(Date value,
JsonGenerator jsonGenerator,
SerializerProvider provider)
throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(value));
this.setSerializerFactory(factory);
spring-servlet.xml中配置:
&mvc:annotation-driven&
&mvc:message-converters&
&bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&
&property name="objectMapper" ref="customObjectMapper"&&/property&
&/mvc:message-converters&
&/mvc:annotation-driven&
&bean id="customObjectMapper" class="com.mon.custom.CustomObjectMapper"&&/bean&
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具(一)输出json数据
springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点:
1.使用mvc:annotation-driven
2.在依赖管理中添加jackson-mapper-asl
1 &dependency&
&groupId&org.codehaus.jackson&/groupId&
&artifactId&jackson-mapper-asl&/artifactId&
&version&${jackson.version}&/version&
5 &/dependency&
3.使用注解@ResponseBody
mvc:annotation-driven默认加载了json转换器,我们添加了上面的依赖包后就可以使用注解@ResponseBody来返回json数据,比如:
1 @RequestMapping("json")
@ResponseBody
public List&User& userList(ModelMap modelMap){
UserExample example = new UserExample();
example.createCriteria().andUsernameIsNotNull();
List&User& users = userMapper.selectByExample(example);
(二)格式化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数据 --&
&dependency&
&groupId&org.codehaus.jackson&/groupId&
&artifactId&jackson-mapper-asl&/artifactId&
&version&${jackson.version}&/version&
&/dependency&
&dependency&
&groupId&com.fasterxml.jackson.core&/groupId&
&artifactId&jackson-core&/artifactId&
&version&${jackson.core.version}&/version&
&/dependency&
&dependency&
&groupId&com.fasterxml.jackson.core&/groupId&
&artifactId&jackson-databind&/artifactId&
&version&${jackson.core.version}&/version&
&/dependency&
19 &properties&
&jackson.version&1.9.13&/jackson.version&
&jackson.core.version&2.4.2&/jackson.core.version&
22 &/properties&
优点是简单方便,缺点是需要在每个需要的属性的getter方法上面添加。宏观的看比较繁琐,但实际开发中也就一行代码的事情,唯一不好的是mybatis自动生成实体类会覆盖。
2.继承ObjectMapper来实现返回json字符串
参考:/blog/1878985
在上面的方法中虽然简单方便,但缺点也很明显,自动生成代码会覆盖实体类,而且每个日期属性都要手动添加,实际中日期属性又是普遍必备。因此,大可全局处理,统一格式。这里需要说下,在数据库中的date和timestamp都会被mybatis转换成date对象。至于生日精确到日、时间精确到到秒的格式规范可以让显示层做处理。统一成yyyy-MM-dd HH:mm:ss
MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册一个JsonSerializer&T&。然后在配置文件中注入自定义的ObjectMapper。
2.1编写子类继承ObjectMapper
1 package mon.util.
3 import org.codehaus.jackson.JsonG
4 import org.codehaus.jackson.JsonProcessingE
5 import org.codehaus.jackson.map.JsonS
6 import org.codehaus.jackson.map.ObjectM
7 import org.codehaus.jackson.map.SerializerP
8 import org.codehaus.jackson.map.ser.CustomSerializerF
10 import java.io.IOE
11 import java.text.SimpleDateF
12 import java.util.D
* 解决Date类型返回json格式为自定义格式
* Created by Administrator on .
18 public class CustomJsonDateConverter extends ObjectMapper {
public CustomJsonDateConverter(){
CustomSerializerFactory factory = new CustomSerializerFactory();
factory.addGenericMapping(Date.class, new JsonSerializer&Date&(){
public void serialize(Date value,
JsonGenerator jsonGenerator,
SerializerProvider provider)
throws IOException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(value));
this.setSerializerFactory(factory);
2.2配置spring文件
1 &mvc:annotation-driven&
&mvc:message-converters&
&bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&
&property name="objectMapper" ref="customObjectMapper"&&/property&
&/mvc:message-converters&
&/mvc:annotation-driven&
&bean id="customObjectMapper" class="mon.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" /&
&/property&
&/property&
&/mvc:message-converters&
&/mvc:annotation-driven&
3.2配置特定的date
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
public Date getBirth() {
阅读(...) 评论()一、SpringMVC使用@ResponseBody时返回json的日期格式
前提了解: @ResponseBody 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson 这个开源的第三方类库。主要是以下两个jar包:jackson-core-asl-1.6.4.jar;jackson-mapper-asl-1.6.4.jar。
出现问题: 使用@ResponseBody时返回json字符串的日期格式。Date类型属性默认返回一个Long型的时间戳,怎样能够返回自定义的日期格式?
解决方案:目前有两种方式实现,
1、局部修改(网上较多,但不推荐);
继承Jackson的抽象类:JsonSerializer&T&,然后在javabean的属性getter()上添加注解@JsonSerialize即可实现。
代码如下: Java代码
收藏代码import java.io.IOE
import java.text.SimpleDateF
import java.util.D
import org.codehaus.jackson.JsonG
import org.codehaus.jackson.JsonProcessingE
import org.codehaus.jackson.map.JsonS
import org.codehaus.jackson.map.SerializerP
* @description 自定义返回JSON 数据格中日期格式化处理
* @author aokunsang
public class CustomDateSerializer extends JsonSerializer&Date& {
public void serialize(Date value,
JsonGenerator jsonGenerator,
SerializerProvider provider)
throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(value));
使用方式:
收藏代码@JsonSerialize(using = CustomDateSerializer.class)
public Date getCreateDate() {
return createD
2、全局修改(强烈推荐):
MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册一个JsonSerializer&T&。然后在配置文件中注入自定义的ObjectMapper。
代码如下:Java代码
收藏代码import java.io.IOE
import java.text.SimpleDateF
import java.util.D
import org.codehaus.jackson.JsonG
import org.codehaus.jackson.JsonProcessingE
import org.codehaus.jackson.map.JsonS
import org.codehaus.jackson.map.ObjectM
import org.codehaus.jackson.map.SerializerP
import org.codehaus.jackson.map.ser.CustomSerializerF
* @description 解决Date类型返回json格式为自定义格式
* @author aokunsang
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper(){
CustomSerializerFactory factory = new CustomSerializerFactory();
factory.addGenericMapping(Date.class, new JsonSerializer&Date&(){
public void serialize(Date value,
JsonGenerator jsonGenerator,
SerializerProvider provider)
throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(value));
this.setSerializerFactory(factory);
spring-servlet.xml中配置:Java代码
收藏代码&mvc:annotation-driven&
&mvc:message-converters&
&bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&
&property name="objectMapper" ref="customObjectMapper"&&/property&
&/mvc:message-converters&
&/mvc:annotation-driven&
&bean id="customObjectMapper" class="com.mon.custom.CustomObjectMapper"&&/bean&
二、@DatetimeFormat使用注意
1、 使用@DatetimeFormat很简单,这里需要注意的是:使用时要引入一个类库joda-time-1.3.jar,否则会无法访问相应路径(400错误)。 ps:该注解可以作用在METHOD,FIELD以及PARAMETER级别上。使用介绍参考:/2011/08/using-spring-3-datetimeformat.html#.UaR3mWWZk0k
2、因为springMVC没有提供默认的日期转换器,前段页面传递过来日期字符串怎么转换为日期类型,如果没有提供全局日期转换器或者数据绑定的基础上,可以使用@DatetimeFormat注解完成。
阅读(...) 评论()spring mvc 的 response body 返回json格式,可以在controller或者方法级别控制json日期(Date)格式吗?
spring mvc 的 response body 返回json格式,可以在controller或者方法级别控制json日期(Date)格式吗?
假设你用的是Jackson框架做JSON转化。可以在Java实体类的属性上加上
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
注解标记,Jackson将Java对象转换成JSON字符串的时候就会用这个注解中的pattern作为日期格式化。
还有一种方法,就是在Spring MVC的配置文件中配置Jackson的DataFormat对象,代码如下:
&mvc:annotation-driven&
&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"/&
&/property&
&/property&
&/mvc:message-converters&
&/mvc:annotation-driven&
--- 共有 1 条评论 ---
谢谢!实体类级别的粒度确实很好。
一般都会配置使用 fastjson 或者 jackson,二者都可以使用配置来指定日期格式。
package com.
import java.io.IOE
import java.text.SimpleDateF
import java.util.D
import org.codehaus.jackson.JsonG
import org.codehaus.jackson.JsonProcessingE
import org.codehaus.jackson.map.JsonS
import org.codehaus.jackson.map.SerializerP
import org.
@Component
public class JsonDateTimeSerializer extends JsonSerializer&Date& {
&& &private static final SimpleDateFormat dateFormat = new SimpleDateFormat(
&& &&& &&& &"yyyy-MM-dd HH:mm");
&& &@Override
&& &public void serialize(Date date, JsonGenerator gen,
&& &&& &&& &SerializerProvider provider) throws IOException,
&& &&& &&& &JsonProcessingException {
&& &&& &String formattedDate = dateFormat.format(date);
&& &&& &gen.writeString(formattedDate);
&& &@JsonSerialize(using = JsonTimeSerializer.class)
&& &public Date getBtime() {
&& &public void setBtime(Date btime) {
&& &&& &this.btime =
感谢各位大神的回答!

我要回帖

更多关于 spring mvc json数组 的文章

 

随机推荐