【问题标题】:Swagger - timestamp weird representationSwagger - 时间戳怪异的表示
【发布时间】:2017-09-08 14:17:32
【问题描述】:

我有 Spring Boot 控制器,为了方便 API 参考,我使用了 Swagger。 关于timestamp的问题。为什么在生成的文档示例中如下所示:

"timestamp": { "date": 0, "day": 0, "hours": 0, "minutes": 0, "month": 0, "nanos": 0, "seconds": 0, "time": 0, "timezoneOffset": 0, "year": 0 }

那么为什么 swagger 有这么奇怪的时间戳示例,而不仅仅是简单的数值,哪个标准描述了这种表示形式?

【问题讨论】:

标签: spring-boot swagger


【解决方案1】:

检查 Swagger (https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md) 的开放规范。

如果你想解决这个问题,试试这个示例 Spring Boot 应用程序

import java.io.IOException;
import java.sql.Timestamp;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@RestController
@EnableSwagger2
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @RequestMapping(value = "/api", method = RequestMethod.POST)
    public Demo messages(HttpServletRequest request, HttpServletResponse response) throws IOException {
        java.util.Date date = new java.util.Date();
        return new Demo(new Timestamp(date.getTime()));
    }

    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors.basePackage(getClass().getPackage().getName())).paths(PathSelectors.any())
                .build().apiInfo(generateApiInfo()).directModelSubstitute(Timestamp.class, Long.class);
    }

    private ApiInfo generateApiInfo() {
        return new ApiInfo("demo", "demo.", "Version 1.0", "urn:tos", "test", "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0");
    }
}

演示对象

import java.sql.Timestamp;

public class Demo {
private Timestamp time;

public Timestamp getTime() {
    return time;
}

public void setTime(Timestamp time) {
    this.time = time;
}

public Demo(Timestamp time) {
    super();
    this.time = time;
}

public Demo() {
    super();
}

}

查看下图或打开http://localhost:8080/swagger-ui.html

.directModelSubstitute(Timestamp.class, Long.class)负责时间戳类型和数值类型的映射

【讨论】:

    猜你喜欢
    • 2021-04-13
    • 2012-06-03
    • 1970-01-01
    • 2016-06-07
    • 2015-06-27
    • 2015-10-20
    • 1970-01-01
    • 2018-09-27
    • 2012-11-28
    相关资源
    最近更新 更多