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

Swagger requestbody示例值为空

竺国兴
2023-03-14

我们正在尝试建立springfox:swagger用户界面。但是,当使用值使用post方法创建restcontroller时。对于不可变接口,示例显示的是{},模型显示的是接口名称,而不是其他名称。

我注意到,当我使用不可变类作为请求体时,示例显示了它的所有属性。我尝试在接口上添加子类型(@ApiModel(subtypes=ImmutableInputLead.class))和父配置(@apimmodel(parent=ImmuableInputlead.class)),但没有改变任何东西

这是我们不变的界面:

@Value.Immutable
@ApiModel
@JsonSerialize(as = ImmutableInputLead.class)
@JsonDeserialize(as = ImmutableInputLead.class)
public interface InputLead {
    @Nullable
    @ApiModelProperty(example = "request id")
    String getRequestId();

    @Valid
    Contact getContact();
}

我们的映射:

@ApiOperation(value = "Create a new lead")
@PostMapping(value = "/")
@Validated
public ResponseEntity create(@Valid @RequestBody InputLead inputLead) throws URISyntaxException {
    String leadId = leadService.create(inputLead);
    ResourceRef leadResourceRef = resourceRefFactory.newResourceRef("/api/leads/" + leadId);

    return ResponseEntity.created(new URI(leadResourceRef.getUrl())).build();
}

我们的objectmapper:

@Bean
public ObjectMapper objectMapper() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
            .indentOutput(true)
            .dateFormat(new ISO8601DateFormat())
            .serializationInclusion(JsonInclude.Include.NON_EMPTY);

    ObjectMapper objectMapper = builder.build();
    objectMapper.registerModule(new JodaModule());
    objectMapper.registerModule(new GuavaModule());
    objectMapper.registerModule(new MazdaValuesModule());
    objectMapper.registerModule(new DateTimeJacksonModule());
    return objectMapper;
}

我们的招摇过市配置:

@EnableSwagger2
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .directModelSubstitute(LocalDate.class, String.class)
                .directModelSubstitute(LocalTime.class, String.class)
                .directModelSubstitute(LocalDateTime.class, String.class)
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("Lead capturing API").build();
    }

}

我希望InputLead类的变量显示在示例中。

我做错了什么?

共有1个答案

经兴安
2023-03-14

我相信您已经解决了这个问题,但是,我将在这里留下一个解决方案供将来查询。

我不确定您使用了哪个昂首阔步的版本,但看起来swagger@2.x不支持@JsonSerializer@JsonDeserializer,您可以在此处确认。

一种方法是为您的不可变接口手动添加替代类型,如下所示

Docket(SWAGGER_2).alternateTypeRules(AlternateTypeRules.newRule(KeyIdentifier.class, ImmutableKeyIdentifier.class))

但是,我正在尝试提出更好的解决方案,如果找到它,我会在这里发布

 类似资料:
  • 我使用SpringFox和Swagger UI编写API文档 我有一个DTO,其中有一个类型为Long的属性。它99%的时间都没有被填充,因此我想通过将属性值设置为来在文档中演示这一事实。因此,我希望在示例部分使用JSON 我已经试过了 但我得到了一个警告:“属性值必须是常量”。我还能做什么?

  • 本文向大家介绍JS作为值的函数用法示例,包括了JS作为值的函数用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS作为值的函数用法。分享给大家供大家参考,具体如下: 这个函数接受两个参数,第一个函数应该是一个函数,第二个参数应该是要传递给该函数的一个值.该函数是通用的. 如: 从一个函数中返回另一个函数(一种极为有用的技术),如: 创建一个比较函数: 使用举例: 更多关于JavaS

  • 我想在我的Swagger-ui界面上修改数据类型下的示例值。目前它包含以下默认值(由Swagger生成): 我想指定实数值,而不是“空”值。PS:我用带注释的spring boot:@ API operation,...

  • 我得到了这段代码,我必须选择正确的答案。 现在: a)y值升为幂 b)x所在单元的地址 c)可变单元地址y d)值5 当我在程序中输入它时,我只是弹出,但我不知道那是不是正确的答案。

  • 7.9. 示例: 表达式求值 在本节中,我们会构建一个简单算术表达式的求值器。我们将使用一个接口Expr来表示Go语言中任意的表达式。现在这个接口不需要有方法,但是我们后面会为它增加一些。 // An Expr is an arithmetic expression. type Expr interface{} 我们的表达式语言由浮点数符号(小数点);二元操作符+,-,*, 和/;一元操作符-x

  • 我有一个应用程序,它有一个列表,当它为空时,它显示“空”,但我想显示任何东西,而不是它,但我不能。我试着做了一个验证,但由于某种原因它仍然显示为null。 代码如下: 但以下是它的表现: 我做错了什么?