Fastjson2采用多module的结构设计,对SpringFramework等框架的支持现独立在extension
包中。
Maven
:
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.53</version>
</dependency>
or
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.53</version>
</dependency>
Gradle
:
dependencies {
implementation 'com.alibaba.fastjson2:fastjson2-extension-spring5:2.0.53'
}
or
dependencies {
implementation 'com.alibaba.fastjson2:fastjson2-extension-spring6:2.0.53'
}
2.0.23版本之后为了兼容Spring 5.x / 6.x,将不同版本独立开不同的依赖包。 如使用2.0.23之前的版本,请参考:
Maven
:
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension</artifactId>
<version>2.0.x</version>
</dependency>
Gradle
:
dependencies {
implementation 'com.alibaba.fastjson2:fastjson2-extension:2.0.x'
}
Fastjson2对于序列化和反序列化的行为进行了重新设计,所以FastJsonConfig
也会重新适配。
Package: com.alibaba.fastjson2.support.config.FastJsonConfig
Attributes:
参数 | 类型 | 描述 |
---|---|---|
charset | Charset | 指定的字符集,默认UTF-8 |
dateFormat | String | 指定的日期格式,默认yyyy-MM-dd HH:mm:ss |
writerFilters | Filter[] | 配置序列化过滤器 |
writerFeatures | JSONWriter.Feature[] | 配置序列化的指定行为,更多配置请见:Features |
readerFilters | Filter[] | 配置反序列化过滤器 |
readerFeatures | JSONReader.Feature[] | 配置反序列化的指定行为,更多配置请见:Features |
jsonb | boolean | 是否采用JSONB进行序列化和反序列化,默认false |
symbolTable | JSONB.SymbolTable | JSONB序列化和反序列化的符号表,只有使用JSONB时生效 |
在Fastjson2中,同样可以使用FastJsonHttpMessageConverter
和 FastJsonJsonView
为 Spring MVC 构建的 Web 应用提供更好的性能体验。
使用 FastJsonHttpMessageConverter
来替换 Spring MVC 默认的 HttpMessageConverter
以提高 @RestController
@ResponseBody
@RequestBody
注解的 JSON序列化和反序列化速度。
Package: com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter
Before Spring 5 Example:
@Configuration
@EnableWebMvc
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
//自定义配置...
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
config.setReaderFeatures(JSONReader.Feature.FieldBased, JSONReader.Feature.SupportArrayToBean);
config.setWriterFeatures(JSONWriter.Feature.WriteMapNullValue, JSONWriter.Feature.PrettyFormat);
converter.setFastJsonConfig(config);
converter.setDefaultCharset(StandardCharsets.UTF_8);
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
converters.add(0, converter);
}
}
从Spring5.0版本开始,WebMvcConfigurerAdapter
已被弃用,您可以直接实现WebMvcConfigurer
接口,而无需使用此适配器。
After Spring 5 Example:
@Configuration
@EnableWebMvc
public class CustomWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
//自定义配置...
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
config.setReaderFeatures(JSONReader.Feature.FieldBased, JSONReader.Feature.SupportArrayToBean);
config.setWriterFeatures(JSONWriter.Feature.WriteMapNullValue, JSONWriter.Feature.PrettyFormat);
converter.setFastJsonConfig(config);
converter.setDefaultCharset(StandardCharsets.UTF_8);
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
converters.add(0, converter);
}
}
使用 FastJsonJsonView
来设置 Spring MVC 默认的视图模型解析器,以提高 @Controller
@ResponseBody
ModelAndView
JSON序列化速度。
Package: com.alibaba.fastjson2.support.spring.webservlet.view.FastJsonJsonView
Before Spring 5 Example:
@Configuration
@EnableWebMvc
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
FastJsonJsonView fastJsonJsonView = new FastJsonJsonView();
//自定义配置...
//FastJsonConfig config = new FastJsonConfig();
//config.set...
//fastJsonJsonView.setFastJsonConfig(config);
registry.enableContentNegotiation(fastJsonJsonView);
}
}
从Spring5.0版本开始,WebMvcConfigurerAdapter
已被弃用,您可以直接实现WebMvcConfigurer
接口,而无需使用此适配器。
After Spring 5 Example:
@Configuration
@EnableWebMvc
public class CustomWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
FastJsonJsonView fastJsonJsonView = new FastJsonJsonView();
//自定义配置...
//FastJsonConfig config = new FastJsonConfig();
//config.set...
//fastJsonJsonView.setFastJsonConfig(config);
registry.enableContentNegotiation(fastJsonJsonView);
}
}
参考:Spring Framework 官方文档 Spring Web MVC 部分,查看更多 。
在Fastjson2中,同样也对 Spring WebSocket 给予支持,可以使用 FastjsonSockJsMessageCodec
进行配置。
Package: com.alibaba.fastjson2.support.spring.websocket.sockjs.FastjsonSockJsMessageCodec
Example:
@Component
@EnableWebSocket
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
@Resource
WebSocketHandler handler;
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
//自定义配置...
//FastjsonSockJsMessageCodec messageCodec = new FastjsonSockJsMessageCodec();
//FastJsonConfig config = new FastJsonConfig();
//config.set...
//messageCodec.setFastJsonConfig(config);
registry.addHandler(handler, "/sockjs").withSockJS().setMessageCodec(new FastjsonSockJsMessageCodec());
}
}
参考:Spring Framework 官方文档 Spring Web Socket 部分,查看更多 。
在Fastjson2中,同样可以使用 GenericFastJsonRedisSerializer
或 FastJsonRedisSerializer
为 Spring Data Redis 提供更好的性能体验。
使用 GenericFastJsonRedisSerializer
作为 RedisTemplate
的 RedisSerializer
来提升JSON序列化和反序列化速度。
Package: com.alibaba.fastjson2.support.spring.data.redis.GenericFastJsonRedisSerializer
Example:
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer();
redisTemplate.setDefaultSerializer(fastJsonRedisSerializer);//设置默认的Serialize,包含 keySerializer & valueSerializer
//redisTemplate.setKeySerializer(fastJsonRedisSerializer);//单独设置keySerializer
//redisTemplate.setValueSerializer(fastJsonRedisSerializer);//单独设置valueSerializer
return redisTemplate;
}
}
通常使用 GenericFastJsonRedisSerializer
即可满足大部分场景,如果你想定义特定类型专用的 RedisTemplate
可以使用 FastJsonRedisSerializer
来代替 GenericFastJsonRedisSerializer
,配置是类似的。
Package: com.alibaba.fastjson2.support.spring.data.redis.FastJsonRedisSerializer
Example:
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(User.class);
redisTemplate.setDefaultSerializer(fastJsonRedisSerializer);
return redisTemplate;
}
}
如果你准备使用 JSONB 作为对象序列/反序列化的方式并对序列化速度有较高的要求的话,可以对jsonb参数进行配置,该参数是 fastjson 2.0.6 版本中新增的支持,配置也很简单。
Example:
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// GenericFastJsonRedisSerializer use jsonb
// GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer(true);
// FastJsonRedisSerializer use jsonb
FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(User.class);
// FastJsonConfig fastJsonConfig = new FastJsonConfig();
// fastJsonConfig.setJSONB(true);
// fastJsonRedisSerializer.setFastJsonConfig(fastJsonConfig);
redisTemplate.setDefaultSerializer(fastJsonRedisSerializer);
return redisTemplate;
}
}
参考:Spring Data Redis 官方文档,查看更多 。
在Fastjson2中,同样可以使用 MappingFastJsonMessageConverter
为 Spring Messaging 提供更好的性能体验。
使用 MappingFastJsonMessageConverter
作为 Spring Cloud Stream 或 Spring Messaging 来提升Message的序列化和反序列化速度。
Package: com.alibaba.fastjson2.support.spring.messaging.converter.MappingFastJsonMessageConverter
Example:
@Configuration
public class StreamConfiguration {
@Bean
@StreamMessageConverter
public MappingFastJsonMessageConverter messageConverter() {
return new MappingFastJsonMessageConverter();
}
}
如果你准备使用 JSONB 作为对象序列/反序列化的方式并对序列化速度有较高的要求的话,可以对 FastJsonConfig
的 jsonb
参数进行配置,该参数是 fastjson 2.0.6 版本中新增的支持,配置也很简单。
注意:JSONB仅支持将Message的payload序列化为byte[]
Example:
@Configuration
public class StreamConfiguration {
@Bean
@StreamMessageConverter
public MappingFastJsonMessageConverter messageConverter() {
MappingFastJsonMessageConverter messageConverter = new MappingFastJsonMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setJSONB(true); // use jsonb
messageConverter.setFastJsonConfig(fastJsonConfig);
return messageConverter;
}
}
参考:Spring Messaging 官方文档,查看更多 。