SpringMVC关于使用Jackson处理日期问题
没有摘录网络上的写法,针对于现在已经学过的进行一下简单的总结
1. 新建持久化类UserInfo.java
public class UserInfo {
private String user_name;
private String account;
private Date create_date;
//省略了getter和setter方法
}
2.通过@ResponseBody注解处理返回数据
mvc:annotation-driven默认加载了json转换器,我们添加了上面的依赖包后就可以使用注解@ResponseBody来返回json数据,
@Controller
public class JsonController {
@GetMapping("/json01")
@ResponseBody
public UserInfo json01(UserInfo userInfo) throws ParseException{
userInfo.setAccount("wukong");
userInfo.setUser_name("悟空");
userInfo.setCreate_date(new java.util.Date());//当前时间
return userInfo;
}
}
3.使用内置的日期格式化工具
同样是全局设置json响应的日期格式,但此方法可以和@JsonFormat共存,也就是说可以全局设置一个格式,特定的需求可以使用注解设置。
<!-- 1.启动SpringMVC注解 -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 优先使用该媒体类型,为了解决IE浏览器下,返回JSON数据的下载问题 -->
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<!-- 使用内置日期工具进行处理 -->
<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>
运行结果图如下
4.使用@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
在实体类的属性或者getter方法上面添加
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
就可以将json的日期格式化。
① 改造一下代码如下
@Controller
public class JsonController {
@GetMapping("/json01")
@ResponseBody
public UserInfo json01(UserInfo userInfo) throws ParseException{
userInfo.setAccount("wukong");
userInfo.setUser_name("悟空");
String date = "2017-07-09";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
userInfo.setCreate_date(df.parse(date));
return userInfo;
}
}
②运行效果如下
这样的效果不是我想要的,那么可以结合注解完成对日期的处理,
③改造UserInfo.java处理
package com.shxt.model;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
public class UserInfo {
private String user_name;
private String account;
private Date create_date;
public String getUser_name() {
return this.user_name;
}
public void setUser_name( String user_name ) {
this.user_name = user_name;
}
public String getAccount() {
return this.account;
}
public void setAccount( String account ) {
this.account = account;
}
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
public Date getCreate_date() {
return this.create_date;
}
public void setCreate_date( Date create_date ) {
this.create_date = create_date;
}
@Override
public String toString() {
return "UserInfo [user_name=" + this.user_name + ", account=" + this.account + ", create_date="
+ this.create_date + "]";
}
}