spring-data-jpa - 使用 spring-data-rest 处理 @CreatedBy、@CreatedAt、@ChangedBy、@ChangedAt 和 @Version 字段
问题描述
我无法确保用@CreatedBy
, @CreatedAt
, @ChangedBy ,
@ChangedAt and
@Version while using
spring-data-rest` 注释的字段中的数据。它以意想不到的方式表现。
PUT
在正文没有标记字段@CreatedAt
并将@ChangedAt
这些字段设置为 时调用端点null
。我已经通过用 注释这些字段来解决这个问题updatable = false
。POST
使用随机(且不正确)@CreatedBy
,@CreatedAt
,调用端点@ChangedBy
会@ChangedAt
忽略这些值并正确设置这些值的值。POST
使用一些随机值调用端点@Version
是在字段中设置不正确的值。我尝试过设置insertable = false
,但由于非空约束,这不起作用。
在这一点上,我很困惑如何确保这些字段不会被来自其余端点的错误请求主体破坏。任何帮助表示赞赏。
解决方案
由于客户端不应修改这些属性,因此应将它们标记为只读。
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String someField;
您可以直接在实体上执行此操作,或者,为了防止您必须将 Jackson 注释引入您的实体,您可以通过 Jackson Mixin 类进行处理。
见:https ://dzone.com/articles/jackson-mixin-to-the-rescue
您可以使用以下配置注册 Mixin:
@Configuration
public class RepositoryConfiguration {
@Autowired
private Jackson2ObjectMapperBuilder objectMapperBuilder;
@Bean
public ObjectMapper objectMapper() {
objectMapperBuilder.mixIn(SomeClass.class, SomeClassMixin.class);
return objectMapperBuilder.build();
}
}
推荐阅读
- java - 如何在 Swift 中将二维数组的大小传递给数组
- file - 根据计数将文件分成相等的部分
- javascript - React/JS 数组表现不同
- vue.js - 是否可以将“v-for”中的迭代元素用作数据属性中的对象键?
- twilio - 如何在 twilio-freeswitch 中启用 G722
- facebook - 无效的密钥哈希。输入的密钥哈希与任何存储的密钥哈希都不匹配
- linux - 如何在shell脚本/bash中将.txt文件输出转换为表格格式[不是html表格格式]
- asp.net - 如何通过 Web.Config 在 cookie 中添加 SameSite:none
- jquery - 剑道ui网格弹出隐藏按钮
- python - Django - 覆盖/替换来自第 3 部分站点包的导入