我使用了不同Spring组件的组合- Boot (2.3),Data,Data REST,Springdoc。在我的模型对象中我使用了审计-我用@CreatedBy,@CreatedDate等注释了一些字段。我想禁用通过REST API设置这些审计字段的值的可能性。同时,我希望这些信息在检索数据时可用。
这似乎是很明显的事情,但我无法找到一种方法来做到这一点。默认情况下,我可以很容易地在API调用中提供这些值,并看到它们被持久化。
理想情况下,这种配置更改在Springdoc (在请求模型中)生成的OpenAPI规范中也是可见的。
发布于 2020-10-15 04:19:52
因此,事实证明我很愚蠢:)
所以我的错误是当时身份验证和授权被禁用了。启用后,我无法为createdBy和其他字段提供值,因为它们只是被正确的值覆盖。
当涉及到OpenAPI规范时,我不得不用以下命令注释字段:
@Schema(accessMode = Schema.AccessMode.READ_ONLY)来自io.swagger.v3.oas.annotations.media.Schema;。这导致了正确的信息。请参见Swagger视图:

发布于 2020-10-15 00:13:41
我想问题出在你糟糕的设计上。请考虑您的设计是否正确。我猜在你的设计中,除了Spring数据REST端点(API),还有其他代码可以创建和更新你的对象并保存到数据库中。
您的问题与Spring Data REST无关。用@Createdxx和@LastModifiedxx注释的审计字段由Spring数据存储库自动更新,而Spring data REST只是调用Spring数据存储库来持久化数据。
回答以下两个问题有助于阐明您的设计。
问题1:如果您希望保留默认情况下由Spring Data REST创建的创建(POST)端点,并且不希望设置带有@Createdxx注释的审计字段,那么负责设置这些审计字段的代码是什么?假设你发送一个POST请求来创建一个对象,你希望createdBy和createdDate为空吗?或者createdBy和createdDate稍后会被其他代码更新吗?
问题2:如果您想保留默认情况下由Spring Data REST创建的更新(PUT/PATCH)端点,并且不希望更新带有@LastModifiedxx注释的审计字段,那么负责更新这些审计字段的代码是什么?这也会导致不完全的审计(您进行了更新,但lastModified信息没有更新)。
https://stackoverflow.com/questions/64330690
复制相似问题