1

我正在尝试记录 Spring Boot 2.5.3 和 Swagger 3(springdoc-openapi 版本 1.5.10)上的 API 构建。这是我第一次接触 Swagger,但直到现在我都设法依靠文档来完成一些事情。

对于对象的特定属性(将在下面发布详细信息),我想提供一个硬编码的 JSON 值,以便更好地了解预期内容。对于我自己的对象,添加 @Schema(example = "SomeStringValue")到对象的字段按预期工作,这意味着在 Swagger-ui 中,响应示例值为“SomeStringValue”。

问题是对于具有来自 3rd 方代码(实际上是核心 Spring)类型的字段,注释被忽略并生成默认示例,就像它根本不会被注释一样。

我现在拥有的如下。

控制器:

@RestController
@RequestMapping("/auth")
@RequiredArgsConstructor
@Slf4j
@Tag(name = "1. Authentication Controller")
public class AuthenticationController {

    // [...]

    @PostMapping(value = "/login", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Operation(description = "Login endpoint")
    public ResponseEntity<AuthenticationC> login(@RequestBody @Valid UserAuthDto userAuthDto, 
        HttpServletRequest request,
        HttpServletResponse response) {

        // [...]
        ResponseEntity<AuthenticationC> authResponse = [...]
        // [...]
        return authResponse;

    }

}

认证C类:

@Data
@Slf4j
public class AuthenticationC {

    // [...]

    @Schema(example = "Any string I want")
    // This is my own POJO and example works without a problem
    private AuthTokenDetails tokenDetails;

    @Schema(example = "Another string I want")
    // This ignores the example value from @Schema
    private org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse oAuth2AccessTokenResponse;

    // [...]

}

我可以通过使用包装类来解决这个问题,但不想修改我的对象只是为了适应 Swagger。

另一个问题是 Jackson 如何参与 Swagger,因为我注意到带有注释的字段@JsonIgnore在示例值输出中也被忽略了。

谢谢你。

4

0 回答 0