#In BeiJing GMT+8, if you are in another area, please refer to GTM time.
spring.jackson.time-zone=GMT+8
解决时区的问题,但是不能动态的,如果我在悉尼呢,+11手动配置,
但是悉尼有夏令时+12?+10?手动配置!
昏了吧
所以为了解决这个方法
1.自己写个转换的注解
2.日期用字符串自己在后台格式化
前两种都很麻烦
我使用最后一种。引入fastjson阿里baba的@jsonFiled失效?
因为根本就没有用,我们必须将springboot的json给改成fastson的
参考如下
首先引入fastjson的以来,必须是最新的不多说
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
然后再启动配置中
Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
http://blog.csdn.net/xuqingge/article/details/53561529
个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析呢?
引入fastjson依赖库:
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
这里要说下很重要的话,官方文档说的1.2.10以后,会有两个方法支持HttpMessageconvert,一个是FastJsonHttpMessageConverter,支持4.2以下的版本,一个是FastJsonHttpMessageConverter4支持4.2以上的版本,具体有什么区别暂时没有深入研究。这里也就是说:低版本的就不支持了,所以这里最低要求就是1.2.10+。
配置fastjon
支持两种方法:
第一种方法就是:
(1)启动类继承extends WebMvcConfigurerAdapter
(2)覆盖方法configureMessageConverters
具体代码如下:
/**
*
* @author Angel --守护天使
* @version v.0.1
* @date 2016年7月29日下午7:06:11
*/
@SpringBootApplication
public class ApiCoreApp extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.PrettyFormat
);
fastConverter.setFastJsonConfig(fastJsonConfig);
converters.add(fastConverter);
}
}
第二种方法:
(1)在App.java启动类中,注入Bean : HttpMessageConverters
具体代码如下:
package com.kfit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.HttpMessageConverter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
/**
*
* @author Angel --守护天使
* @version v.0.1
* @date 2016年7月29日下午7:06:11
*/
@SpringBootApplication
public class ApiCoreApp {
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
fastConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = fastConverter;
return new HttpMessageConverters(converter);
}
public static void main(String[] args) {
SpringApplication.run(ApiCoreApp.class, args);
}
}
那么这时候在实体类中使用@JSONField(serialize=false),是不是此字段就不返回了,如果是的话,那么恭喜你配置成功了,其中JSONField的包路径是:com.alibaba.fastjson.annotation.JSONField。
fastjson使用@JSONField、@JSONType、SerializeFilter定制序列化
http://blog.csdn.net/liuxiao723846/article/details/52137555
使用fastjson进行序列化,就是把JavaBean转换为JSON格式的数据。而且fastjson的序列化高度可控性,可以自己定制序列化。fastjson的定制序列化有很多中实现方式,主要有如下的方式:
- 通过@JSONField定制序列化
- 通过@JSONType定制序列化
- 通过SerializeFilter定制序列化
1、在实体类上的字段使用@JSONField定制序列化:
//配置序列化的时候,不序列化id
@JSONField(serialize=false)
private int id;
private String name;// 姓名
private int age; //年龄
// 配置序列化的名称
@JSONField(name="gender")
public String sex;
2、在类上通过@JSONType定制序列化:
//配置序列化的时候,不序列化id sex
@JSONType(ignores ={"id", "sex"})
public class Uoimplements Serializable {}
// 配置序列化的时候,序列化name 和sex
@JSONType(includes={"name","sex"})
public class Uo1implements Serializable {}
注:注意和@JSONField不同的是,@JSONType是配置在类上的,而@JSONField是配置在字段和方法上的。
3、使用SerializeFilter定制序列化:
通过SerializeFilter可以使用扩展编程的方式实现定制序列化。fastjson提供了多种SerializeFilter:
- PropertyPreFilter: 根据PropertyName判断是否序列化;
- PropertyFilter: 根据PropertyName和PropertyValue来判断是否序列化;
- NameFilter: 修改Key,如果需要修改Key,process返回值则可;
- ValueFilter: 修改Value;
- BeforeFilter: 序列化时在最前添加内容;
- AfterFilter: 序列化时在最后添加内容;
以上的SerializeFilter在JSON.toJSONString中可以使用。
1)PropertyPreFilter:
定制序列化,只序列化一部分字段,将需要序列化的字段名,配置到数组中。如果什么都不配置,则序列化全部字段 。
User user = newUser();
user.setId(1);
user.setName("lanjingling");
user.setSex(4);
//定制序列化,只序列化一部分字段,将需要序列化的字段名,配置到数组中 如果什么都不配置,则序列化全部字段
SimplePropertyPreFilterfilter = new SimplePropertyPreFilter(User.class, newString[]{"name"});
String jsonString =JSON.toJSONString(user,filter );
System.out.println(jsonString);
2)PropertyFilter 根据key和value判断是否需要序列化:
PropertyFilterfilter2 = new PropertyFilter() {
@Override
publicboolean apply(Object object, String key, Object value) {
if(key.equals("sex")) {
if((Integer)value >1) {
returntrue;
}
}else if (key.equals("name")) {
returntrue;
}
returnfalse;
}
};
String jsonString =JSON.toJSONString(user,filter2 );
System.out.println(jsonString);
3)NameFilter :
//如果需要修改Key,process返回值则可 返回需要修改后的key值,如果不修改,则返回name 切记不能返回null,否则会报错
NameFilternameFilter = new NameFilter() {
@Override
publicString process(Object object, String name, Object value) {
if(name.equals("id")){
return"ID";
}
returnname;
}
};
4)ValueFilter 序列化时修改value:
ValueFiltervalueFilter = new ValueFilter() {
@Override
publicObject process(Object object, String name, Object value) {
if(name.equals("name")){
return"张三";
}
return"";
}
};
5)BeforeFilter 序列化时在最前添加内容 :
BeforeFilterbeforeFilter = new BeforeFilter() {
@Override
publicvoid writeBefore(Object object) {
writeKeyValue("start","bofore");
}
};
6)AfterFilter 序列化之时在最后添加内容 :
AfterFilterafterFilter = new AfterFilter() {
@Override
publicvoid writeAfter(Object object) {
writeKeyValue("end","after");
}
};
String jsonString =JSON.toJSONString(user,afterFilter);
System.out.println(jsonString);
希望能解决你们的问题