修改springfox-swagger源码,使example中时间格式默认为“yyyy-MM-dd HH:mm:ss”

修改swagger源码,使example中时间格式默认为“yyyy-MM-dd HH:mm:ss”

前言

简单点说,在swagger中,怎么能针对如下vo中的java.util.Date类型的字段:createDate,html

能在swagger的界面上达到下面的效果呢?java

若是尝试过的同窗,可能知道,这里,若是不作任何修改的话,出来的效果是下面这样的:spring

解决方法

我一开始百度搜了下,找到了这篇:数据库

http://www.javashuo.com/article/p-ohoecudl-ek.htmlmaven

它的解决办法呢,是在ApiModelProperty注解上加了 example 属性,即下图所示:ui

/**
     * 建立时间
     */
    @ApiModelProperty(value = "建立时间", example = "2019-10-30 15:34:12")
    private Date createDate;

我吧,感受这样也很麻烦,若是可以感知到是Date类型,自动就把 example设为上述格式多好?this

不用多说,估计要改源码了。code

个人办法是,从 example()方法入手,查找使用到它的地方(记得maven要勾选下载源码),咱们发现了以下两处:xml

断点打在上面的方法内以后,再次运行,寻找合适的切入点,发现其调用堆栈以下:htm

最终修改方法以下:

在工程里,新建了一个同包名同类名的 springfox.documentation.builders.ModelPropertyBuilder类,而后修改以下方法:

这里,简单附上代码,修改得不多:

## springfox.documentation.builders.ModelPropertyBuilder    
    /**
     * Updates the example
     * @param example - example value
     * @return this
     * @deprecated @since 2.8.1 Use the one with Object as parameter
     */
    @Deprecated
    public ModelPropertyBuilder example(String example) {
        if ("java.util.Date" .equals(qualifiedType)) {
            this.example = "2019-10-30 15:34:12";
        }else {
            this.example = defaultIfAbsent(example, this.example);
        }
        return this;
    }

具体的swagger版本可能有微小差异,但差异应该不大,我这边是最新版的2.9.2

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

总结

总体来讲,只是覆盖jar包的类,很简单,主要是理清其逻辑。若是不清楚怎么覆盖jar包的类,可参考我上一篇文章。

懒要懒到底,能自动的就不要手动,Hibernate正向工程完成Oracle数据库到MySql数据库转换(含字段转换、注释)

相关文章
相关标签/搜索