Spring boot 禁用在SpringDataREST中的创建/更新请求中设置审核字段
我正在使用各种Spring组件的组合—引导(2.3)、数据、数据REST和Springdoc。在我的模型对象中,我使用审计-我用@CreatedBy、@CreatedDate等注释一些字段。我想禁用通过RESTAPI设置这些审计字段值的可能性。同时,我希望在检索数据时可以使用这些信息 这似乎是一件很明显的事情,但我找不到一个方法来做到这一点。默认情况下,我可以轻松地在API调用中提供这些值,并看到它们被持久化Spring boot 禁用在SpringDataREST中的创建/更新请求中设置审核字段,spring-boot,spring-data,spring-data-rest,springdoc,Spring Boot,Spring Data,Spring Data Rest,Springdoc,我正在使用各种Spring组件的组合—引导(2.3)、数据、数据REST和Springdoc。在我的模型对象中,我使用审计-我用@CreatedBy、@CreatedDate等注释一些字段。我想禁用通过RESTAPI设置这些审计字段值的可能性。同时,我希望在检索数据时可以使用这些信息 这似乎是一件很明显的事情,但我找不到一个方法来做到这一点。默认情况下,我可以轻松地在API调用中提供这些值,并看到它们被持久化 理想情况下,这样的配置更改在Springdoc生成的OpenAPI规范(在请求模型中)
理想情况下,这样的配置更改在Springdoc生成的OpenAPI规范(在请求模型中)中也是可见的。我猜问题来自您糟糕的设计。请考虑你的设计是否正确。我想在您的设计中,除了SpringDataRESTEndpoints(API)之外,还有其他代码可以创建和更新对象并保存到数据库 您的问题与Spring数据REST无关。用@Createdxx和@LastModifiedxx注释的审计字段由Spring数据存储库自动更新,Spring数据REST只调用Spring数据存储库来持久化数据 回答以下两个问题有助于澄清您的设计 问题1: 如果您希望在默认情况下保留由Spring数据创建的创建(POST)端点,并且不希望设置带有@Createdxx注释的审核字段,那么什么代码负责设置这些审核字段? 假设发送POST请求以创建对象,是否希望
createdBy
和createdDate
为空?或者,createdBy
和createdDate
稍后会被其他代码更新吗
问题2:
如果您希望在默认情况下保留由Spring数据创建的更新(放置/修补)端点,并且不希望更新带有@LastModifiedxx注释的审核字段,那么什么代码负责更新这些审核字段?这也会导致不完整的审计(您进行了更新,但上次修改的信息没有更新)。所以我很傻:) 所以我的错误是,身份验证和授权在当时被禁用。启用后,我无法为
createdBy
和其他字段提供值,因为它们只是被正确的值覆盖
当谈到OpenAPI规范时,我必须使用以下注释字段:
@Schema(accessMode = Schema.AccessMode.READ_ONLY)
来自io.swagger.v3.oas.annotations.media.Schema代码>。这导致了正确的信息。请参见“大摇大摆”视图:
谢谢你的帮助。我刚刚发现了配置方面的错误。。看看我的答案。但是谢谢!你应该接受你的答案:)嘿,这样做的感觉很奇怪……:)