消息转换器封装返回体

2023-11-15

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>

 

import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.HttpMessageNotWritableException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;

public class MJFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {

    public static final Charset UTF8 = Charset.forName("UTF-8");
    private Charset charset;
    private SerializerFeature[] features;

    public MJFastJsonHttpMessageConverter() {
        super();
        this.charset = UTF8;
        this.features = new SerializerFeature[0];
    }

    @Override
    protected void writeInternal(Object obj, HttpOutputMessage outputMessage)
            throws IOException, HttpMessageNotWritableException {
        // obj就是controller中注解为@ResponseBody的方法返回值对象
        if (obj instanceof ApiResult) {

            String text = JSONObject.toJSONString(obj, this.features);
            byte[] bytes = text.getBytes(this.charset);
            outputMessage.getBody().write(bytes);
        } else {
            String text = JSONObject.toJSONString(ApiResult.valueOf(obj), this.features);
            byte[] bytes = text.getBytes(UTF8);
            outputMessage.getBody().write(bytes);
        }
    }
       
}

 

import java.util.List;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;

/**
WriteNullListAsEmpty  :List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
WriteMapNullValue:是否输出值为null的字段,默认为false

 * @author admin
 *
 */
@Configuration
public class MyWebmvcConfiguration implements WebMvcConfigurer{
    
        @Bean
        public HttpMessageConverters fastJsonHttpMessageConverters() {
            /**
             * 1.先定义一个convert转换消息的对象
             * 2.添加fastjson的配置信息,比如:是否要格式化返回的json数据
             * 3.在convert中添加配置信息
             * 4.将convert添加到converters当中
             */
            //1.先定义一个convert转换消息的对象
            MJFastJsonHttpMessageConverter fastConverter = new MJFastJsonHttpMessageConverter();
            
            return new HttpMessageConverters(fastConverter);
        }

        @Override
        public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
            
            MJFastJsonHttpMessageConverter fjc = new MJFastJsonHttpMessageConverter();
                FastJsonConfig fj = new FastJsonConfig();
                fj.setSerializerFeatures(
                        SerializerFeature.DisableCircularReferenceDetect,
                         SerializerFeature.WriteNullStringAsEmpty,
                         // Number null -> 0
                         SerializerFeature.WriteNullNumberAsZero
                        );
                fjc.setFastJsonConfig(fj);
                converters.add(fjc);
            
         
            for (HttpMessageConverter<?> messageConverter : converters) {
                System.out.println(messageConverter); //2
            }
        }

}
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

消息转换器封装返回体 的相关文章

  • 给定两个字符串 S 和 T,求 S 中包含 T 所有字符的最短连续子字符串的长度,同时要求时间复杂度不得超过 O(n)。

    输入 两个字符串 S 和 T S ADOBECODEBANC T ABC 输出 一个 S 字符串的子串 BANC 在这个样例中 S 中同时包含一个 A 一个 B 一个 C 的最短子字符串是 BANC function func source
  • 小程序用户头像昵称获取不到解决办法

    1 根据官方要求 不会要求强制性授权 头像和昵称也将被收回 给的是统一的头像和昵称 需要我们调用接口去获取微信头像和昵称 2 通过原生的标签调用来获取微信头像和微信昵称 注意 这里的标签不能够修改 修改会导致头像回显问题和昵称获取问题 头像
  • OCaml实用工具

    好久没写博客了 天天写代码 有时候打游戏 就懒了 本人主要为了扩展sgx edger8r 所以学习了一番OCaml 多动手搜和写代码才算有点学会了OCaml 这里主要说一下OCaml工具的使用 OCaml的语法学习请直接参考官方手册 Rea
  • Nginx http 500错误分析及解决方法

    Nginx http 500错误分析及解决方法 参考文章 1 Nginx http 500错误分析及解决方法 2 https www cnblogs com gdufs p 6410373 html 备忘一下
  • Python基础之条件判断

    Python基础之条件判断 一 环境介绍 二 条件判断介绍 三 if语句的使用 1 if的第一种使用方法 2 if的第二种使用方法 3 if的第三种使用方法 4 if的第四种使用方法 四 if判断的运算符 五 学习小结 一 环境介绍 Pyt
  • CSS中如何实现文字跑马灯效果?

    聚沙成塔 每天进步一点点 专栏简介 跑马灯 写在最后 专栏简介 前端入门之旅 探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅 这个专栏是为那些对Web开发感兴趣 刚刚踏入前端领域的
  • opencv颜色识别思路

    一 Opencv颜色识别步骤 调用手机摄像头 Opencv颜色处理 存储色块图像和位置信息 接下来主要介绍opencv颜色处理过程 二 Opencv图像处理思路 创建滑动条 用来调节阈值 识别出不同颜色 颜色空间转换 将RGB转换为HSV模
  • YOLO v5算法详解

    1 YOLO v5网络结构 2 输入端 3 Backone网络 4 Neck网络 5 Head网络 1 YOLO v5网络结构 图 1 YOLO v5网络结构图 由上图可知 YOLO v5主要由输入端 Backone Neck以及Predi
  • 列表元组字符串是python的什么系列_Python 序列(字符串、列表、元组)概述

    在 Python 中有六种基本数据类型 即数字 包括整形 长整 浮点 字符串 列表 元组 字典和布尔类型 其中 字符串 列表 元组被称之为序列 因为它们有着相同的访问模式 它们的每一个元素可以通过指定一个偏移量的方式得到 而多个元素可以通过
  • upload-labs 第四关-第九关闯关方法

    Pass 04 1 打开靶机 点击查看提示 发现这是一个 htaccess绕过 2 写入一个 htaccess的文件 文件内容如下 3 将文件修改为 htaccess的文件 4 上传文件 5 新建一个文本文档 内容如下 6 将文件类型修改为
  • [k8s]k8s架构图解

    k8s架构图解 启动参数及证书梳理 master端必须要装flannel 注 flannel网络能确保各节点间 Pod 网段实现互通 master 节点与 node 节点上的 Pods 通过 Pod 网络通信 所以需要在 master 节点
  • 搜索算法——爬山法

    不断更新中 一 爬山算法 爬山算法是一种简单的贪心搜索算法 该算法每次从当前位置的临近空间中选择一个最优解作为当前解 直到达到一个局部最优解 爬山算法可以类比成一个有失忆的人在浓雾中爬山 这里就揭示了爬山算法的两个问题 失忆 就是说这个人不
  • decode函数_decode函数的妙用

    如下这张表 包含id和name两列 其中id是主键 name允许为空 存在两条记录 一条是 id 1 name a 另一条是 id 2 name SQL gt create table emp id number primary key n
  • MySQL-数据库读写分离(中)

    作者 小刘在C站 个人主页 小刘主页 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 学习两年总结出的运维经验 以及思科模拟器全套网络实验教程 专栏 云计算技术 小刘私信可以随便问 只要会绝不吝啬 感谢CSDN让你我相遇 前言
  • 基于iView-Cascader的多选级联选择器:cascader-multi

    前言 iview的cascader 多级联动虽然可以实现多级联动 但是不支持多选 这里 cascader multi 可以支持多选功能 实现效果 真实效果和他有出入 这是网上找的好看的动图 实现步骤 1 安装 npm i cascader
  • 求解集合A和集合B的差集

    求解集合A和集合B的差集 题目 已知集合A和B的元素分别用不含头结点的单链表存储 函数difference 用于求解集合A与B的差集 并将结果保存在集合A的单链表中 例如 若集合A 5 10 20 15 25 30 集合B 5 15 35
  • 关于vue-cli 3版本做的改动,没有static文件夹,本地文件应放在哪儿,如何引用

    2 x版本 3 0版本 原来放在static下的文件 现在应该放在public文件夹下 原来的请求数据的写法 现在的写法 总结 vue3 0 对脚手架的结构和静态文件的引用方式都进行了简化
  • 字符流字节流相互转换

    1 字节输出流转换成字符输出流 写到硬盘 创建字节输出流 FileOutputStream fis new FileOutputStream E document aaa txt 字节输出流转换成字符输出流 OutputStreamWrit

随机推荐

  • 使用Python办公自动化:将文本与图表写入到PPT中

    使用Python办公自动化 将文本与图表写入到PPT中 其中含有写入文本 表格及图表到PPT中的一些常用函数 还含有一些对单元格的操作函数 代码如下 import pptx from pptx util import Inches from
  • 模型视图投影矩阵传递

    11
  • mysql 批量插入更新数据 的 两种方法

    有时会有这种需求 当符合某种条件的数据存在时 去修改它 不存在时 则新增 也就是saveOrUpdate操作 当没有的时候就是插入语句 有数据的时候判断主键和唯一索引是否一样 一样那就按照 ON DUPLICATE KEY UPDATE写的
  • 安装raw文件下的apk文件

    有时候我们需要将一些小软件嵌在我们的软件里面 那么我们就可以将这些apk放在我们的raw或者assets文件下进行暂时存储 那么下面我们用放在raw文件下进行展示安装这一过程 首先我们要把我们需要隐藏我apk文件放在raw文件下 raw是在
  • Dirichlet distribution狄利克雷分布

    狄利克雷分布 狄利克雷分布 维基百科 是一组连续多变量概率分布 是多变量普遍化的B分布 为了纪念德国数学家约翰 彼得 古斯塔夫 勒热纳 狄利克雷 Peter Gustav Lejeune Dirichlet 而命名 狄利克雷分布常作为贝叶斯
  • [1036]Jadx gui(JAVA反编译工具)

    github https github com skylot jadx Jadx gui是一款JAVA反编译工具 一个简单轻巧的 DEX 到 Java 反编译器 可让您导入 DEX APK JAR 或 CLASS 文件并将其快速导出为 DE
  • 实时数据库,内存数据库,关系型数据库比较

    内存数据库 内存数据库就是将数据放在内存中直接操作的数据库 它利用内存的读写速度比磁盘快 内存是随机访问而磁盘是顺序访问这两个特点 将数据保存在内存中 在内存中模仿建立表结构和索引结构并针对内存特性进行优化 相比从磁盘上访问 内存数据库访问
  • 集成电路设计开源EDA软件yosys详解1:工具安装

    yosys为一套开源的针对verilog的rtl综合框架 从本节开始将详细介绍工具的使用 并详细对源代码进行分析和讲解 首先介绍一下工具的安装和使用 yosys的git网址为https github com YosysHQ yosys 下面
  • scanner中InputMisMatchException处理

    我们知道在使用scanner进行控制台输入时候 使用next 方法输出 但是这种方法存在弊端 比如你使用nextInt 方法 但是输入一个字符串类型 就会抛出InputMisMatchException异常 首先来看一下scanner在jd
  • crmeb Java2.0集群部署教程

    crmeb Java 宝塔单机nginx负载均衡集群部署 1 添加站点 此处不做详述 2 站点设置 网站目录 关闭防跨转攻击 3 站点设置 添加反向代理 4 站点设置 配置文件 此处因为是本地测试 使用IP 端口 需要在之前的项目同级目录下
  • 关于lua语言及热更新的研究一

    lua语言是个非常强大的语言 在一些游戏里进行一些热更新操作 下面就来分享一下这个lua语言的基本语法 我这里使用了Sublime Text2 ctrl B 运行 Ctrl 快捷键注释 下面是代码 print hello 单行注释 多行注释
  • 开发工程师的职场人生路

    新闻来源 伯乐在线 当你选择计算机或者电子 自控等专业进入大学时 你本来还是有机会从事其它行业的 可你毕业时执迷不悟 仍然选择了开发做为你的职业 真是自做孽不可活 不过 欢迎你和我一样加入这个被其它人认为是风光无限的 白领 吧 恭喜 你选择
  • 一次内存溢出事故 - 用 jprofiler 分析 gc root

    事情经过 事情是这样 公司项目是一个springcloud的微服务 服务每隔半个月就会发生一次频繁的fullGC 后来定位到是缓存不合理导致的 该缓存的key是一条条sql value是表名 这个缓存是用来干嘛呢 查了下他主要是分库组件sh
  • Flutter 基于Bloc框架的封装

    1 页面状态的bloc封装 1 1 定义一个基类用于bloc用于处理页面状态 状态主要有 loading error empty 以及展示内容的showContent enum PageEnum showLoading showError
  • 基于frp原理实现的轻量级内网穿透工具frp-python

    gitee地址 https gitee com usualheart frp python github地址 https github com usualheart frp python git frp 是一个专注于内网穿透的高性能的反向代
  • mysql将某一列的值统一更改

    要在 MySQL 中将某一列的值统一更改 可以使用 UPDATE 语句 具体方法是 UPDATE 表名 SET 列名 新值 WHERE 条件 例如 要将名为 users 的表中的 age 列的值全部改为 25 可以这样写 UPDATE us
  • matlab 运行环境,Matlab运行环境

    Exception in thread main java lang UnsatisfiedLinkError Failed to find the library mclmcrrt7 14 dll required by MATLAB B
  • 学完Python,怎么变现?小哥哥10000元外快了解一下

    自学 Python 之后如果不去公司上班 自己一个人可以通过此技能挣什么钱 逆天的Python 只要你掌握了相关技术 就可以靠它赚钱 具体怎么赚 我们来看看一位小哥哥的回答 以我差不多四年的 Python 使用经验来看 大概可以按以下这些路
  • gradle学习笔记

    gradle 是一个让构建自动化的工具 类似于maven ant的功能 使用gradle可以给java项目编译 单元测试 打包 或者生成可执行的jar包等 gradle教程 Gradle Java 插件 w3cschoolJava 插件 J
  • 消息转换器封装返回体