swagger对json数据的处理

在实习中遇到了一个不寻常的事情,今天和同事讨论一个小问题,同事使用swagger,想要调用一个接口,这个接口要传递一个json对象,对应java的一个实体类,但是有一个属性同事不想看到它,就用@JsonIgnore给注掉了(当时这个我不知道,😫),问题出现的场景是在调用另一个接口的时候,impl类里需要查询该字段,并向这个类传递这个属性。他从数据库中查询到数据后设置给了这个属性,最后调用json就是看不到这个属性。

开始看的时候我也懵了,调试都有数据,最终发现了是该属性加上了@JsonIgnore注解。正好向我想起之前一篇文章的另一个注解@JSONField。好奇心驱使我在swager中做了对比。

其实这个问题很简单的,只用在@ApiModelProperty注解中加上hidden = true就可以了(默认为false)。

这个问题解决。但是我是一个爱思考的人。他用的是@JSONField注解,而我之前没有用过这个注解,我决定是尝试使用一下。

一个简单的场景

实体类

@ApiModel
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AA {
    
    @ApiModelProperty(name = "name")
    Integer id;

    @ApiModelProperty(name = "name")
    String name;
    
    @ApiModelProperty(name = "my_id")
    int my_id;
    
    List<String> list;

}

controller

@RestController
@RequestMapping("/admin/acl/index")
public class IndexController {
    @GetMapping("/test")
    public AA test() {
        AA aa = new AA();
        aa.setId(0);
        aa.setName("");
        aa.setMy_id(0);
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        aa.setList(list);
        return aa;
    }
}

所有测试针对list属性

1.list什么注解不加

swagger

 

 

postman

swagger竟然默认给到list一些信息。

postman也正常返回,毕竟什么也没加

2.只给list加上@JsonIgnore

查看结果

swagger

 

postman

swagger中没有list字段

postman中没有list字段

加上@JsonIgnore注解后,list字段就像消失了一样,没人知道它是否存在。

我之前用的是@JSONField,我不仅是测试还是复习,观察一下结果。

3.只给list加上@JSONField(name = "my_list")

 swagger

 

 

 

postman

这个name属性怎么没有起作用?是swagger太强势了?

4.只给list加上@JSONField(serialize = false)

swagger

 

 

 

postman

这swagger这么强势吗?我的@JSONField直接失效,不序列化失效了。

不是swagger太强势,而是@JSONField就没有起作用,这个注解是fastjson的注解。

springboot中默认的json解析器是Jackson。如果不指定要用的json解析器,就会使用默认的。所以我们要想让它起作用就要指定fastjson为我们的默认json解析器。

这次测试忘记了这个知识点(看来我还待练)

在配置类加上下面代码即可

@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);
}

查看效果

5.配置后只给list加上@JSONField(name = "my_list")

swagger

 

 

postman

 

swagger中的list没有使用别名

postman中使用了别名,并格式化了了json数据

6.配置后只给list加上@JSONField(serialize = false)

swagger

 

 

postman

 

swagger还是会有list字段

postman中已经接受不到这个字段了

总结:

1.不想在swagger文档中显示字段但传递是有这个字段就使用@ApiModelProperty(hidden = true)

2.不想在swagger文档中显示字段而且不想让字段在返回结果中使用@JsonIgnore(如果只使用一个注解)

3.想在swagger文档中显示字段而且不想让字段在返回结果中使用@JSONField(serialize = false)(如果只想使用这一个注解,暂时想不到有这样的场景,手动狗头)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/43898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学会动态规划】按摩师(11)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

【Linux】信号保存信号处理

前言&#xff1a;对信号产生的思考 上一篇博客所说的信号产生&#xff0c;最终都要有OS来进行执行&#xff0c;为什么&#xff1f;OS是进程的管理者&#xff01;信号的处理是否是立即处理的&#xff1f;在合适的时候 -》那什么是合适的时候&#xff1f;信号如图不是被立即处理…

企业知识管理系统安全是重中之重

企业开展知识管理工作的益处是全方位的&#xff0c;效果能从业务的各方面得到体现&#xff0c;最终效果就是企业竞争力的提升与企业经营业绩的提升。 知识管理系统的意义在于&#xff0c;构建系统的知识库&#xff0c;对纷杂的知识内容&#xff08;方案、策划、制度等&#xf…

IDE/mingw下动态库(.dll和.a文件)的生成和部署使用(对比MSVC下.dll和.lib)

文章目录 概述问题的产生基于mingw的DLL动态库基于mingw的EXE可执行程序Makefile文件中使用Qt库的\*.a文件mingw下的*.a 文件 和 *.dll 到底谁起作用小插曲 mingw 生成的 \*.a文件到底是什么为啥mingw的dll可用以编译链接过程转换为lib引导文件 概述 本文介绍了 QtCreator mi…

MySQL的基本概念(数据库类、数据模型、服务启动与连接)

目录 数据库基础 DB和DBMS 数据库的类型 RDBMS的结构 MySQL的服务启动与连接&#xff08;Windows系统下&#xff09; 服务启动 客户端连接 数据库基础 DB和DBMS 什么是DB 将大量的数据保存起来&#xff0c;通过计算机加工而成的可以进行高效访问的数据集合就成为数据…

cc2500 怎么计算理论输出频率

一、需要已知的数据 外部晶振频率&#xff08;26MHz -28MHz&#xff09;FREQ2 - 频率控制词汇&#xff0c;高字节FREQ1 - 频率控制词汇&#xff0c;中字节FREQ0 - 频率控制词汇&#xff0c;低字节 二、计算方法 1. 公式 Fxosc 指的是外部晶振的频率。FREQ [ 23 : 0 ] : 指的…

Navicat远程连接服务器失败 2002 - Can‘t connect to server on ...(10060)

报错如下&#xff1a; 2002 - Can’t connect to server on ‘192.168.33.59’(10060) 解决方案&#xff1a; 下面列举可能出现的几种情况&#xff1a; 1.防火墙原因&#xff0c;需要关闭防火墙 systemctl stop firewalld systemctl disable firewalld2.数据库未开启&#x…

【OpenCV】常见问题及解决办法

文章目录 0 前言1 中文乱码问题2 非法路径问题 0 前言 本篇博客主要是总结OpenCV使用过程中遇到的一些问题&#xff0c;以及对应的解决办法&#xff0c;这里重点是关注OpenCV&#xff0c;既有基于C的&#xff0c;也有基于Python的&#xff0c;比较全面&#xff0c;而且也会随着…

格式工厂5.10.0版本安装

目前格式工厂有很多&#xff0c;大多都可以进行视频转换 之前遇到一个用ffmpeg拉流保存的MP4在vlc和迅雷都无法正常播放的问题&#xff0c;发现视频长度不对&#xff0c;声音也不对&#xff0c;最后换到了格式工厂的格式播放器是可以正常播放的 格式工厂下载之家的地址 http…

【docker】docker

目录 一、docker概念二、docker安装(centos7)三、docker架构3.1 镜像image3.2 容器container 四、配置docker镜像加速器五、docker命令5.1 docker服务命令5.2 docker镜像命令5.3 docker容器命令 六、docker容器的数据卷6.1 容器卷概念及作用6.2 配置数据卷6.3 挂载示例6.4 数据…

Android 屏幕适配各种宽高比的手机

由于android 手机的屏幕宽高比样式太多了&#xff0c;在设计UI时&#xff0c;很多时候&#xff0c;会因为宽高比&#xff0c;分辨率不同会有展示上的差异。 我是这样解决的 在activity的onCreate方法前&#xff0c;调用&#xff1a; fun screenFit(context: Context) {val me…

深度学习中标量,向量,矩阵和张量

1.标量(Scalar) 只有大小没有方向&#xff0c;可用实数表示的一个量 2.向量(Vector) 可以表示大小和方向的量 3.矩阵(Matrix) m行n列,矩阵中的元素可以是数字也可以是符号&#xff0c;在深度学习中一般是二维数组 4.张量(Tensor) 用来表示一些向量、标量和其他张量之间的…

详解zookeeper安装使用

目录 1.概述 1.1.功能 1.2.特点 1.3.数据结构 2.安装 2.1.Windows 2.2.Linux 3.基础操作 3.1.增 3.2.删 3.3.改 3.4.查 3.5.监听 4.JAVA操作Zookeeper 4.1.依赖 4.2.客户端 4.3.增 4.4.删 4.5.查 4.6.改 1.概述 1.1.功能 zookeeper&#xff0c;Apache旗下…

K8S初级入门系列之二-集群搭建

一、前言 为了更好学习K8S&#xff0c;建议自行搭建一套K8S的环境&#xff0c;目前比较流行的有两种搭建工具&#xff0c;一种是单机版的minkube&#xff0c;一种是集群版的kubeadm。minkube更多是用于实验环境&#xff0c;且单机版隐藏了很多细节&#xff0c;而kubeadm更贴近实…

【C语言】指针---初阶

&#x1f341; 博客主页:江池俊的博客 &#x1f341;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f31f; 三连支持一下博主&#x1f49e; 目录 一、指针是什么&#xff1f; 1.1指…

2min搞定 mac pycharm新建导入python项目

mac pycharm新建和导入python项目&虚拟环境配置&下载类库 一、通用设置step1 、通过自定义配置&#xff0c;指定默认虚拟环境变量step2、设置虚拟环境和指定默认工作空间step3 、导入或者新建python项目 二、pycharm新建python项目step1、点击新建【file->newProjec…

抖音、美团、华为“巧”搅支付春水

配图来自Canva可画 如今&#xff0c;移动支付已经成了当下最流行的支付方式&#xff0c;从小吃店到大商超&#xff0c;从地铁、公交到飞机、高铁&#xff0c;移动支付的应用场景层出不穷&#xff0c;可以说&#xff0c;现代人的生活已经离不开移动支付了。而在此背景下&#x…

动态内存常见的问题

对空指针的解引用 改正后的代码&#xff1a; 返回栈&#xff08;临时变量&#xff09;空间地址的问题 释放空间后及时把指针设为空 void Test(void) {char* str (char*)malloc(100);strcpy(str, "hello");free(str);str NULL;//释放空间后及时把指针设为空if (s…

25-30天每日强训选择题改错解析

int i5; int s(i)(i)(i–)(–i); s( )//s 的值是什么&#xff1f; A 28 B 25 C 21 D 26 E 24 F 23 正确答案&#xff1a; E 5775 24 或者 --在后先不变化数值 -- 在前先变化再运算 以下哪项不属于java类加载过程&#xff1f; A 生成java.lang.Class对象 B int类型对象成…

【MySQL】存储引擎(六)

&#x1f697;MySQL学习第六站~ &#x1f6a9;本文已收录至专栏&#xff1a;MySQL通关路 ❤️文末附全文思维导图&#xff0c;感谢各位点赞收藏支持~ 一.引入 大家可能没有听说过存储引擎&#xff0c;但是一定听过引擎这个词&#xff0c;引擎就是发动机&#xff0c;是一个机器…