我无法确保使用@CreatedBy
,@CreatedAt
,@ ChangedBy,
@ ChangedAtand
@ Versionwhile using
spring-data-rest`注释的字段中的数据。它以意想不到的方式表现。
PUT
和@CreatedAt
的字段时调用@ChangedAt
端点将这些字段设置为null
。我通过用updatable = false
注释那些字段来解决这个问题。POST
,@CreatedBy
,@CreatedAt
,@ChangedBy
调用@ChangedAt
endpoint忽略这些值并正确设置这些值的值。POST
的一些随机值调用@Version
端点会将不正确的值设置到字段中。我已经尝试设置insertable = false
但由于非null约束而无效。到目前为止,我很困惑如何确保这些字段不会被来自其他端点的错误请求主体损坏。任何帮助表示赞赏。
由于这些属性不应由客户端修改,因此您应将其标记为只读。
@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();
}
}