springboot笔记示例六:fastjson2集成

springboot笔记示例六:fastjson2集成

本文md下载

https://download.csdn.net/download/a254939392/89491102

本文md文档下载地址

#springboot json官方说明

https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-json.html

spring Boot 提供与三个 JSON 映射库的集成:

  • Gson
  • Jackson
  • JSON-B

springboot 默认库为:Jackson

 <!-- springboot-json -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
    </dependency>

yml配置自定义序列化格式

spring:
  jackson:
    # @JsonFormat 日期格式和时区配置
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    property-naming-strategy: SNAKE_CASE

阿里巴巴FastJson2集成

spring5.x

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.43</version>
</dependency>
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2-extension-spring5</artifactId>
    <version>2.0.43</version>
</dependency>
package com.brm.config;

import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.JSONWriter;
import com.alibaba.fastjson2.support.config.FastJsonConfig;
import com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

@Configuration
public class FastjsonConfiguration {

    @Bean
    public HttpMessageConverters fastJsonConfigure() {

        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //fastjson2 默认格式为yyyy-MM-dd HH:mm 无需重新设置
        fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        //fastjson2 默认StandardCharsets.UTF_8 无需重新设置
//        fastJsonConfig.setCharset(StandardCharsets.UTF_8);

        fastJsonConfig.setReaderFeatures(
                //字段如 vBtn  会被转为 VBtn  处理这样的问题
                JSONReader.Feature.SupportSmartMatch,
                JSONReader.Feature.FieldBased,
                //初始化String字段为空字符串""
//                JSONReader.Feature.InitStringFieldAsEmpty,
                //对读取到的字符串值做trim处理
                JSONReader.Feature.TrimString);

        fastJsonConfig.setWriterFeatures(
                //字段如 vBtn  会被转为 VBtn  处理这样的问题
                JSONWriter.Feature.FieldBased,
                //long 转 string 丢失精度问题
                JSONWriter.Feature.WriteLongAsString,
                // 保留map空的字段
                JSONWriter.Feature.WriteMapNullValue,
                //将List类型的null转成[]
                JSONWriter.Feature.WriteNullListAsEmpty,
                //将String类型的null转成""
                JSONWriter.Feature.WriteNullStringAsEmpty,
                //将Boolean类型的null转成false
//                JSONWriter.Feature.WriteNullBooleanAsFalse,
                //日期格式转换
                JSONWriter.Feature.PrettyFormat
                //将空置输出为缺省值,Number类型的null都输出为0,String类型的null输出为"",数组和Collection类型的输出为[]
//                JSONWriter.Feature.NullAsDefaultValue
        );

        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        List<MediaType> supportedMediaTypes = new ArrayList<>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
//        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
        supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
        supportedMediaTypes.add(MediaType.APPLICATION_PDF);
        supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XML);
        supportedMediaTypes.add(MediaType.IMAGE_GIF);
        supportedMediaTypes.add(MediaType.IMAGE_JPEG);
        supportedMediaTypes.add(MediaType.IMAGE_PNG);
        supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
        supportedMediaTypes.add(MediaType.TEXT_HTML);
        supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
        supportedMediaTypes.add(MediaType.TEXT_XML);
        
        fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
        fastJsonHttpMessageConverter.setDefaultCharset(StandardCharsets.UTF_8);

        return new HttpMessageConverters(fastJsonHttpMessageConverter);
    }
}
首先,在Spring Boot项目中添加Redis和Fastjson的依赖: ```xml <!-- Redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- Fastjson依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.73</version> </dependency> ``` 接着,在application.yml中配置Redis连接信息: ```yaml spring: redis: host: localhost port: 6379 password: database: 0 ``` 然后,我们可以创建一个RedisUtil类来操作Redis,示例如下: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; @Component public class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; /** * 添加缓存 * @param key * @param value * @param expireTime */ public void set(String key, Object value, long expireTime) { if (value instanceof String) { redisTemplate.opsForValue().set(key, value, expireTime, TimeUnit.SECONDS); } else { redisTemplate.opsForValue().set(key, JSON.toJSONString(value, SerializerFeature.WriteClassName), expireTime, TimeUnit.SECONDS); } } /** * 获取缓存 * @param key * @param clazz * @param <T> * @return */ public <T> T get(String key, Class<T> clazz) { Object value = redisTemplate.opsForValue().get(key); return value == null ? null : JSON.parseObject(value.toString(), clazz); } /** * 删除缓存 * @param key */ public void delete(String key) { redisTemplate.delete(key); } } ``` 在上面的代码中,我们使用了Fastjson对对象进行序列化和反序列化,并且在set方法中判断了value的类型,如果是String类型,则直接存储,否则使用Fastjson将对象序列化后再存储。在get方法中,我们先获取缓存的值,然后判断是否为null,如果不为null,则使用Fastjson将值反序列化成指定的class类型。 最后,在需要使用Redis的地方,我们可以注入RedisUtil,然后调用它的方法即可: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private RedisUtil redisUtil; @GetMapping("/test") public String test() { String key = "test"; String value = "hello world"; redisUtil.set(key, value, 60); String result = redisUtil.get(key, String.class); return result; } } ``` 以上就是在Spring Boot项目中集成Redis并使用Fastjson进行序列化的示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天-逍遥哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值