修改接口参数名和在Swagger中的展示名

这篇具有很好参考价值的文章主要介绍了修改接口参数名和在Swagger中的展示名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

我们有一个接口要支持后端排序,所以需要在请求对象里面增加两个参数:排序字段名、排序方式(asc、desc)。

正好基础jar包中有一个类可以直接拿来用。

@Data
public class OrderByItem {
	private String column;
    private String direction;
}

但是考虑到前端使用的是element框架,默认使用prop来定义排序字段,使用order来定义排序方式。

因此,考虑使用这两个属性来接受排序字段。但是仍然用OrderByItem这个类来接收参数。

为啥不重新定义一个类呢?

因为OrderByItem这个类还有配套的工具类,用来进行相关的转换。所以为了复用这个工具类,就有了这个奇葩需求——我要用OrderByItem这个类型来接受参数,但是这两个参数在Swagger中要展示成另外的名字,前端也需要用另外的名字来传参。

老实说,直接用columndirection没啥大问题。因此我们不去讨论这样做是否合理,姑且看如果我想实现类似的效果应该怎么处理。

JSON格式

如果OrderByItem作为JSON格式使用,那么就很简单了:

@Data
public class OrderByItem {
    @JsonProperty("prop")
	private String column;

    @JsonProperty("order")
    private String direction;
}

这里直接使用JsonProperty注解即可。

非JSON格式

如果不是JSON格式,事情会变得麻烦一点。

首先是要解决参数接收的问题,这里可以定义一个HandlerMethodArgumentResolver

public static class OrderItemHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {

        private static final String ORDER = "order";
        private static final String ORDER_DESC = "descending";
        private static final String ORDER_ASC = "ascending";
        private static final String PROP = "prop";

        @Override
        public boolean supportsParameter(MethodParameter parameter) {
            return OrderByItem.class.isAssignableFrom(parameter.getParameterType());
        }

        @Override
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

            String prop = webRequest.getParameter(PROP);
            if (StringUtils.isBlank(prop)) {
                return null;
            }

            String order = webRequest.getParameter(ORDER);
            // validate order

          	OrderByItem orderByItem = new OrderByItem();
			orderByItem.setColumn(prop);
		    orderByItem.setDirection(order);
			
            return orderByItem;
        }
    }

注册OrderItemHandlerMethodArgumentResolver:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
       registry.addConverter(new OrderItemHandlerMethodArgumentResolver());
    }
}

这里虽然解决了参数接收的问题,但是Swagger生成的文档参数名还是columndirection。我们需要改成proporder

由于OrderByItem是jar包中的类,无法修改源码,所以不能直接使用ApiModelProperty这个注解。

好在Swagger提供了一个“替身”功能,我们需要先定义一个替身类:

@Data
@ApiModel("排序")
public static class OrderRequest {

    @ApiModelProperty("字段名称")
    private String prop;

    @ApiModelProperty("排序方式:descending倒序,ascending:正序")
    private String order;
}

然后使用替身:

@Configuration
public class SwaggerConfig {

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("test")
                .description("test")
                .version("1.0")
                .build();
    }

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .directModelSubstitute(OrderByItem.class, OrderRequest.class);
    }
}

这样做,当Swagger显示OrderByItem类时,就会用OrderByItem代替。文章来源地址https://www.toymoban.com/news/detail-598005.html

到了这里,关于修改接口参数名和在Swagger中的展示名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java技术-接口文档-Swagger2&Swagger3&接口文档UI整合

    目录 一、Swagger2完整用法 1.POM依赖 2.接口类 3.实现类 4.托管静态资源 5.接口文档配置 6.生产环境关闭接口文档 7.Swagger3页面效果 二、Swagger3完整用法 三、Swagger整合Knife4jUi 1.POM依赖 2.接口类 3.实现类 4.托管静态资源 5.接口文档配置 6.生产环境关闭接口文档 四、注释和参数讲解

    2024年02月16日
    浏览(49)
  • 深入理解Golang中的接口与实例展示

    标题:深入理解Golang中的接口与实例展示 引言: Golang(Go)的接口是一项强大的特性,它为面向对象编程带来了灵活性和可维护性。本文将深入讲解Golang中的接口概念,从基础到实际应用,通过详细案例展示,帮助读者更好地掌握接口的使用和设计。 一、接口基础概念: 接

    2024年01月21日
    浏览(47)
  • ubuntu修改主机名和用户名

    参考文章: https://blog.csdn.net/fkmmmm/article/details/127333212 一、修改主机名 2、 3、 二、修改用户名 1、修改所有原用户名(如果文件内没有原用户名则不用改 2、 3、注意:只修改用户名!后面的全名、目录等不要动! 4、 5、输入sudo mv /home/olduser1 /home/newuser2更改原文件的名称

    2024年02月12日
    浏览(48)
  • 修改 Stable Diffusion 使 api 接口增加模型参数

     参考:https://zhuanlan.zhihu.com/p/644545784 1、修改 modules/api/models.py 中的 StableDiffusionTxt2ImgProcessingAPI 增加模型名称  2、修改 modules/api/api.py 中 text2imgapi 代码:  3、修改 modules/processing.py 中的 StableDiffusionProcessingTxt2Img ,增加模型名称接收

    2024年02月06日
    浏览(38)
  • Flutter知识点(三)修改flutter工程名和包名

    debug/AndroidManifest.xml,  main/AndroidManifest.xml,  profile/AndroidManifest.xml, gradle.build的中application id, 原生的android代码, 这一块建议用android工程的方式打开。不然无法使用refactor修改名字。 修改flutter工程名, 修改两个地方。 pubspec.yaml中的name 各个代码文件的import \\\'package: name, 这里没有

    2024年02月06日
    浏览(140)
  • 修改默认的路由器登陆名和密码避免受到网络攻击

    路由器的账号和密码一般都是默认的,很容易受到网络的攻击。下面来看看如何修改默认的路由器登陆名和密码。 浏览器输入192.168.1.1,用默认的账号和密码先登陆路由器。如下图 找到路由器设置里的“系统工具” 。 点击“修改登录口令”,会出现以下的窗口。 输入原用户

    2024年02月06日
    浏览(44)
  • @JsonProperty 前端传参数名和后端参数名不一样 入参 出参 映射 注解 springboot springmvc

    使用 @JsonProperty 前端传productName,后端使用  @JsonProperty 转换一下。 返回也是一样。如果出参也用这个对象,出参用的是  @JsonProperty 里的字段名。前端拿到的是productName。 @JsonProperty  位于  com.fasterxml.jackson.annotation   依赖如下  常用到jackson的注解: @JsonProperty、@JsonIgnore、

    2024年04月23日
    浏览(34)
  • Elasticsearch的DSL和在RestClient中的应用

      Elasticsearch提供了基于JSON的DSL来定义查询。常见的查询类型包括: 查询所有 :查询出所有数据,一般测试用。例如: match_all:匹配所有文档并返回它们; 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query:针对单个

    2023年04月27日
    浏览(42)
  • 线性代数基础概念和在AI中的应用

    线性代数是数学的一个分支,专注于向量、向量空间(也称为线性空间)、线性变换和矩阵的研究。这些概念在数据科学、人工智能、工程学和物理学等多个领域都有广泛应用。以下是这些基本概念的详细解释和它们在数据处理和AI中的应用。 向量 基本概念 :向量是具有大

    2024年04月26日
    浏览(41)
  • 齐次矩阵的理解深入和在图形学、Unity中的应用

    在探讨图形学和Unity中的3D编程时,我们经常会遇到一个非常核心的数学工具—— 齐次矩阵 。这篇文章将一步步深入地探讨齐次矩阵的基本概念、它在图形学中的应用,以及如何在Unity中利用这一概念来创建令人震撼的3D场景。 首先,我们来聊聊什么是齐次坐标。在二维空间

    2024年01月22日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包