swagger-ui页面接口的入参出参与代码实体类不一致有差异

后端开发,在进行后端接口开发时,会用到swagger进行接口管理。
路径:http://local:8080/xxx/swagger-ui.html

但是在swagger-ui页面,查看接口时,发现 入参出参列表 自己开发的 接口出入参实体类 不一样

class
碰到这个问题,很多人第一反应,以为是 浏览器缓存,客户端缓存等导致的,其实不是的,真正原因是开发人员定义的实体类的api model名导致的。

比如工程中有两个实体类,这两个实体类是完全不一样的,只是ApiModel命名一样。

如下两个实体类
PerionInfo.java 是你的接口用的入参实体类
CarInfo.java 是工程里已有的实体类
但是由于两个实体类都叫同一个名: @ApiModel(“查询详细信息入参”)
所以就导致了,你的接口swagger-ui展示成了其他的实体类参数了。

@ApiModel("查询详细信息入参")
public class PerionInfo implements Serializable{
	private static final long seriUID = -1L;
    @ApiModelProperty("姓名")
    private String name;
    @ApiModelProperty("性别")
    private String sex;
    @ApiModelProperty("生日")
    private String birday;
@ApiModel("查询详细信息入参")
public class CarInfo implements Serializable{
	private static final long seriUID = -1L;
    @ApiModelProperty("车名")
    private String name;
    @ApiModelProperty("颜色")
    private String col;
  1. 在抄别人代码的时候,一定要注意不能硬抄,关键位置代码一定要改
  2. swagger 管理接口比较常见,开发人员需要用心维护好
  3. 这个坑,有缘人就不要再踩了
把最近项目中遇到的问题跟大家分享下:最近做了一个项目,后端接口写好后和pc端vue联调完毕,业务还需要和App端[ios,andro]对接,问题来了,后端接口中的入参和出参都是Java数据类型[Date,Boolean,Integer,Long等]的,当初这样定义的确是为了方便后端接口代码处理比较方便,但App端要求后端接口字段不能返回null值,不然页面报错,渲染不出来。 解决... Swagger2接口参数实体类字段自定义 使用swagger文档的时候发现实体类参数每次都是全部显示出来,导致和前端对接很麻烦,就产生了想要自定义的实体类参数的想法,于是在百度了很久,找到了flymoringbird大神的文章Swagger2 自定义注解 :解决一个简单的model类 适用于controller的多个方法,参考了一下发现只能实现body传参,query传参还是没有办法实现,于是又开始了百度,找到了x-easy大神swagger2 同一个实体用在多个不同的controller接口展示不同的字段 @ApiOperation(value = "删除用户", notes = "根据用户名删除指定用户", httpMethod = "POST") @ApiImplicitParam( name = "username", value = "用户的用户名", required = true, dataType="String" @ApiResponses({... 浅谈Swagger注解@Api@ApiOperation@ApiImplicitParams 和 @ApiImplicitParam@ApiParam@ApiModel和@ApiModelProperty 使用场景:在 Rest 接口类上边使用。 标记类为 Swagger 资源类,运行时有效。 Api 用在类上,说明该类的作用。可以标记一个Controller类做为swagger 文档资源,使用方式: @Api(value = "/user", description = "Operatio 直接传这个格式的字符串,服务端会报错 Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDateTime` from String "2021-11-24T08:41:36.357Z": Failed to deser import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNu... 这个错误大部分时候不会影响正常使用,但也有的时候会导致无法传参测试。 此处的问题主要原因是Swagger找不到你自己定义的实体类信息。所以你需要添加一个接口Swagger能够找到你的实体类信息,这个时候需要加一个识别的接口。 @RestController public class SwaggerController... 这时再去看就只有这两个参数了,可是问题又来了,我现在前端要传一堆参数过来,当然里面全是实体类StudentEntity的参数,但是Entity中的部分参数,又没有我们怎么办呢? 定义接口的时候,发现进swagger ui显示接口入参参数和我代码中的不一致? 并且两个接口入参显示一样,但是实际上我代码中引用的是两个入参对象的。不一样的参数。 起初以为是浏览器缓存、服务器缓存,都clean了,还是一样。怎么回事? 先把代码贴出来。看看 很明显,是两个不一样的接口,两个入参对象,下图为两个入参对象的数据结构。 很明显,两个不一样的对象,但是为什么引用了同一个入参对象呢????? 仔细一端详,哦。。。。。。@ApiModel配置了同一个名字,也就是说,按照顺序来说,两个. swagger的配置和用法,在此就不做过多赘述了,在使用过程中,可能有的朋友会遇到这样的情况,这个接口显示的示例参数,却是另一个接口参数格式,这个对后端自测的角度来说,非常不友好。但只要把参数手动改成正确的格式,后端接口还是能正确接收的。 我们习惯使用DTO作为接口入参,一个DTO对象往往需要标注@ApiModel注解,我们从原备注信息能够获得该注解的详情。 能够针对我们的接口入参对象提供额外的信息,也就是能够根据后端入参的数据接口,显示一个可测试的数据对象,一个json格式的对象。 而出现这个接口.