SpringBoot中使用fastjson2

目录

1. 引入依赖

2. 编写fastjson2配置文件

3. 编写测试程序(测试时间格式即可)

3.1 实体类

3.2 controller

4. 测试并观察

5. 博主在使用jackson-dataformat-xml传输xml格式信息的时候失败了,有老铁有解决办法的话可在评论区留言。对上面的配置不懂的友友也可留言。


1. 引入依赖

spring版本根据自己的项目进行更改,在maven中央仓库可找到spring5的fastjson2的拓展依赖。

<!--        fastjson2依赖包-->
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.52</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2-extension-spring6</artifactId>
            <version>2.0.52</version>
        </dependency>
2. 编写fastjson2配置文件
@Configuration
public class FastjsonConfiguration {

    @Bean
    public HttpMessageConverters fastJsonConfigure() {

        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = getFastJsonConfig();

        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);
        // 设置默认字符集为 UTF-8
        fastJsonHttpMessageConverter.setDefaultCharset(StandardCharsets.UTF_8);

        // 返回 HttpMessageConverters 实例
        return new HttpMessageConverters(fastJsonHttpMessageConverter);
    }

    private static FastJsonConfig getFastJsonConfig() {
        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
        );
        return fastJsonConfig;
    }
}
3. 编写测试程序(测试时间格式即可)
3.1 实体类
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyProduct {
    private Integer id;
    private String proName;
    private LocalDateTime proTime;
}
3.2 controller
@RestController
public class ProductController {
    @Resource
    private MyProduct product ;
    @GetMapping("/getProduct")
    public MyProduct getProduct() {
        //测试数据
        product.setId(100);
        product.setProName("西红柿");
        //将输出yyyy-MM-dd HH:mm:ss的时间格式
        product.setProTime(LocalDateTime.now());
        return product;
    }
}
4. 测试并观察

http://localhost:8083/getProduct

测试成功。

5. 博主在使用jackson-dataformat-xml传输xml格式信息的时候失败了,有老铁有解决办法的话可在评论区留言。对上面的配置不懂的友友也可留言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值