OpenApi 3.0 处理刷新令牌 n 下载 Excel 端点

问题描述 投票:0回答:1

我有一个使用 OpenApi 3.0.3 的 Java 应用程序。

我已经实现了一个用于生成 Excel 的端点,在 yaml 中定义如下:

/api/secured/customers/export:
    post:
      summary: Export customers
      description: Identifies the customers by id and exports them
      operationId: exportCustomers
      tags:
        - customers
      requestBody:
        description: Customers ids
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: integer
                format: int64
      responses:
        200:
          description: The export file
          content:
            application/vnd.ms-excel:
              schema:
                type: string
                format: byte
            application/octet-stream:
              schema:
                type: string
                format: binary

生成的实现是:

/**
 * POST /api/secured/customers/export : Export customers
 * Identifies the customers by id and exports them
 *
 * @param requestBody Customers ids (required)
 * @return The export file (status code 200)
 */
@Operation(
    operationId = "exportCustomers",
    summary = "Export customers",
    description = "Identifies the customers by id and exports them",
    tags = { "customers" },
    responses = {
        @ApiResponse(responseCode = "200", description = "The export file", content = {
            @Content(mediaType = "application/vnd.ms-excel", schema = @Schema(implementation = byte[].class)),
            @Content(mediaType = "application/octet-stream", schema = @Schema(implementation = byte[].class))
        })
    }
)
@RequestMapping(
    method = RequestMethod.POST,
    value = "/api/secured/customers/export",
    produces = { "application/vnd.ms-excel", "application/octet-stream" },
    consumes = { "application/json" }
)
default ResponseEntity<byte[]> exportCustomers(
    @Parameter(name = "request_body", description = "Customers ids", required = true) @Valid @RequestBody List<Long> requestBody
) {
    return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);

}

当 JWT 令牌过期时,就会出现我的问题。当尝试抛出 ExpiredJwtTokenException 时,我收到以下异常:

11:40:34.100 [http-nio-8080-exec-1] WARN   o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver: Failure in @ExceptionHandler de.noventi.administration.learning.config.exception.ExceptionHandlerConfig#handleExpiredTokenException(ExpiredTokenException)
org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:256)
    at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:245)
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136)
    at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:413)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:74)
    at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:141)
    at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:80)
    at de.noventi.administration.learning.config.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:56)

我想这是因为它也没有生成 application/json 。但我尝试添加:

    401:
      description: Unauthorized
      content:
        application/json:
          schema:
            type: string

但这不起作用。

你有什么想法吗?谢谢!

java jwt yaml openapi openapi-generator
1个回答
0
投票

问题似乎可能与您的异常处理程序未生成客户端可以接受的内容类型的响应有关。 HttpMediaTypeNotAcceptableException 表示客户端没有可接受的表示。

© www.soinside.com 2019 - 2024. All rights reserved.