首先,我对Java和Spring生态系统相对较新。
顺便说一句,我使用OpenAPI来描述我的REST API。该应用程序使用Sping Boot 3和Security 6。我想自动生成尽可能多的代码。示例端点规范:
/cashcards:
post:
summary: Create a new cash card.
tags:
- demo
responses:
'201':
description: Created
headers:
Location:
schema:
type: string
description: Created cashcard location.
operationId: postCashCard
description: Create a new cash card.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CashCardDetail'
examples:
Example 1:
value:
amount: '100.10'
owner: sarah
description: A cash card without ID
security:
- OAuth2-Authorization:
- 'write:cashcards'
现在我正在使用OpenAPI generator生成API和模型类。然后覆盖控制器类中特定端点的API方法并在那里编写逻辑。
我正面临一些障碍。由于我使用的是spring Boot 和spring security,我希望我的一些控制器方法具有以下参数
default ResponseEntity<Void> postCashCard(
@Parameter(name = "CashCardDetail", description = "A cash card without ID") @Valid @RequestBody(required = false) CashCardDetail cashCardDetail
)
但我希望控制器就像
@Override
@PreAuthorize("hasAuthority('SCOPE_write:cashcards')")
public ResponseEntity<Void> postCashCard(@RequestBody CashCard newCashCardRequest, UriComponentsBuilder ubc,
Principal principal)
当然,由于方法参数不一样,我不能覆盖自动生成的API方法。在API参数中添加UriComponentsBuilder
和Principal
没有意义。
同样,我将使用spring data jpa。使用像@OneToMany
,@JoinColumn
这样的注解似乎也很困难。
如果有人在实际生产用例中使用openapi生成器,我想知道这些问题是如何解决的。如何自动生成与OpenAPI定义无关的方法参数?如何将模型字段注解等添加到自动生成的代码中?
如果自动发电机的目标是完全不同的,我试图实现,我想听到的。现在我必须手动添加@PostAuthrize
,即使范围/安全方案在OpenAPI中定义。不使用生成器手动编写代码似乎更快。
感谢您的耐心等待。
1条答案
按热度按时间c8ib6hqw1#
您不修改控制器方法的参数。在这种情况下,这些额外的参数可以在方法(或周围的类)的代码中读取,如下所示:
类级字段
控制器内法