当前位置: 首页 > 知识库问答 >
问题:

Springfox Swagger-使用索引显示计时枚举值

刁瀚昂
2023-03-14

更新:

@ApiModelProperty(dataType = "string", allowableValues = "NANOS, MICROS, MILLIS, SECONDS, MINUTES, HOURS, HALF_DAYS, DAYS, WEEKS, MONTHS, YEARS, DECADES, CENTURIES, MILLENNIA,ERAS, FOREVER") 
private ChronoUnit durationType; 

======================================================

在我的团队的项目中,我们有一个带有java.time.temporal.ChronOunit字段的实体。在类中,是这样定义的:

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(name="duration_type", nullable = false)
    @JsonView({Views.RequestDetailView.class})
    private ChronoUnit durationType;

此枚举类型具有索引(NANOS、秒、小时等),以及与这些索引关联的键值对,如

    NANOS("Nanos", Duration.ofNanos(1)),
"durationType":{"type":"string","enum":["Nanos","Micros","Millis","Seconds","Minutes","Hours","HalfDays","Days","Weeks","Months","Years","Decades","Centuries","Millennia","Eras","Forever"]}
"durationType":{"type":"string","enum":["NANOS","MICROS","MILLIS","SECONDS","MINUTES","HOURS","HALF_DAYS","DAYS","WEEKS","MONTHS","YEARS","DECADES","CENTURIES","MILLENNIA","ERAS","FOREVER"]}

这并不重要,除非自动化测试工具会发现这些名称,并在请求中发送一个名称,然后请求失败,因为它与索引不匹配。

这就是它所测试的endpoint的样子:

    @ApiResponses(value = ....)
    @ApiOperation(value = "Update Container", notes = "Update Container")
    @PostMapping(value = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity updateContainer(@PathVariable("id") id, @RequestBody final Request request){
....
}

方法内部的代码并不重要,因为请求不会到达它,而是以400的响应弹出。

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfoSwagger2())
                .select()
                .apis(RequestHandlerSelectors.basePackage("....controller"))
                .paths(PathSelectors.any())  
                .build()
                .protocols(new HashSet<>(Arrays.asList("https")))
                .securitySchemes(getSecuritySchemes())
                .securityContexts(getSecurityContexts())
                .useDefaultResponseMessages(true)
        ;
    }

共有1个答案

陆城
2023-03-14

一个同事提供的答案,所以我会把它贴在这里。只需将@APIModelProperty注释添加到ChronouIt字段,如下所示:

@ApiModelProperty(dataType = "string", allowableValues = "NANOS, MICROS, MILLIS, SECONDS, MINUTES, HOURS, HALF_DAYS, DAYS, WEEKS, MONTHS, YEARS, DECADES, CENTURIES, MILLENNIA,ERAS, FOREVER") 
private ChronoUnit durationType; 

甚至没有必要将@apimodel注释添加到它所在的类中,因为类中的其他所有内容都遵循默认值。

 类似资料:
  • 我正在使用Swashback生成Swagger输出。在我的模型I上,具有以下属性: FieldValue是一个简单的类,可以保存ID和名称: 通过代码中的一些业务逻辑,一组可能的键值对(ID和名称)映射到此属性。 现在,我想在我的Swagger输出中的enum标签中显示所有可能的值。使用ISchemaFilter的一个实现,即MyProperty属性上的一个自定义属性,并使用allOf而不是简单的

  • 我正在使用Compass从DTO对象中过滤数据。如果字段是POJO对象,则使用标记字段;如果字段是字符串,则使用标记字段。这非常有效:我将对象和字符串编入索引。 我的问题是如何注释枚举数据类型? 我拥有的枚举示例: 在这个片段中,我应该在哪里放置注释,应该放置哪个注释?

  • 例如: Swagger这样显示枚举: 我想要的是: API返回“显示名称”,然而,Swagger显示“枚举名称”,这经常导致混淆。有可能改变狂妄的价值观吗?

  • 问题内容: 在阅读有效的Java时,我遇到了“使用枚举而不是常量”的建议。在当前项目中,我正在执行与以下类似的操作: 我将如何使用枚举来实现此目的?由于必须使用该接口,因此必须为索引使用。上面的例子只是一个例子。我实际上正在使用一个for索引值的API 。 问题答案: 将一种有用的模式与一种反模式一起应用通常会失败;-) 在您的情况下,如果要用值替换常量,则将数组用于非真正的类数组数据会带来问题。

  • 我可以用对象类型表示法描述索引类型限制,例如: 但是,令人惊讶的是,在接口中使用索引表示法时,似乎不可能做到这一点: 错误是: 计算的属性名称必须是“字符串”、“数字”、“符号”或“任何”类型。 为什么会这样?根据定义,TypeScript中的枚举只能有字符串值或数字值(或两者都有,但不建议这样做),我认为枚举本身对于它列出的所有值都可以像联合类型一样工作。 进一步调查,我还发现,在下面的例子中,

  • 问题内容: 我希望在查看我的DataFrame时,我将看到multiIndex的所有值,包括随后的行在其中一个级别具有相同的索引时。这是一个例子: 输出为: 我想在西南角也有20。也就是说,我希望我的DataFrame是: 熊猫有能力做到这一点吗? 问题答案: 您需要设置为: 如果整个笔记本电脑都需要此显示选项,则可以如下设置该选项: 说明文件: display.multi_sparse为 Tru