gpt4 book ai didi

rest - Swagger 生成的 Spring Controller 在 POST 的主体参数中接收 NULL

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:56 25 4
gpt4 key购买 nike

我的 API-first swagger 客户端/服务器错误地传输了 POST 请求正文参数对象。 Spring (4.3.14.RELEASE) 服务器在 POST 请求的 @RequestBody 参数中接收到空值。

通过 SwaggerUI 传递的请求与通过生成的请求之间的主要区别 typescript client 是 SwaggerUI 将对象字段作为查询参数传递(Spring 处理得很好),但是生成的 typescript client over json body(Spring 处理空值)。

似乎自动生成的客户端通过正文发送参数,但自动生成的服务器需要查询中的参数。

Swagger 片段:

/project:
post:
security:
- Bearer: []
tags:
- Project
summary: Create new project
operationId: createProject
consumes:
- "application/json"
- "text/json"
parameters:
- name: project
in: body
description: project value
schema:
$ref: '#/definitions/ProjectRequestDTO'
responses:
'200':
description: Successful response
schema:
$ref: '#/definitions/ProjectDTO'
default:
description: Bad requst

生成的 Spring MVC 方法:

ApiOperation(value = "Create new project", nickname = "createHachathon", notes = "", response = ProjectDTO.class, authorizations = {
@Authorization(value = "Bearer")
}, tags={ "Project", })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Successful response", response = ProjectDTO.class),
@ApiResponse(code = 200, message = "Bad requst") })
@RequestMapping(value = "/project",
consumes = { "application/json", "text/json" },
method = RequestMethod.POST)
default ResponseEntity<ProjectDTO> createHachathon(@ApiParam(value = "project value" ) @Valid @RequestBody ProjectRequestDTO project) {

我正在通过手动破解的客户端从 typescript 发送请求(添加标题参数以证明该参数将被很好地解码):

return this.httpClient.post<ProjectDTO>(`${this.basePath}/project?title=hello`,

Chrome 控制台中的结果请求: enter image description here

不幸的是,Spring 只接收通过查询参数传递的值,而不是通过请求主体传递的值:

enter image description here

请帮助我使我的 swagger-codegen-maven-plugin 2.3.1 生成客户端/服务器 swagger API,它将透明地传输数据。

最佳答案

根本原因是Spring忽略了实现的Interface的方法参数注解,所以在我的Controller实现中忽略了@RequestBody。

<delegatePattern>true</delegatePattern>里面的参数<configOptions> swagger-codegen-maven-plugin 部分解决了这个问题。

此参数使 Swagger 在 API 接口(interface)方法的默认实现中生成对委托(delegate)方法的调用。我的 Controller 实现了这个方法并覆盖了这个委托(delegate)方法,所以源方法注释是安全的。

关于rest - Swagger 生成的 Spring Controller 在 POST 的主体参数中接收 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49909504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com