使用spring-data-rest处理@CreatedBy,@ ManagementAt,@ ChangedBy,@ ChangeEt和@Version字段

问题描述 投票:0回答:1

我无法确保使用@CreatedBy@CreatedAt,@ ChangedBy, @ ChangedAtand @ Versionwhile usingspring-data-rest`注释的字段中的数据。它以意想不到的方式表现。

  1. 在身体没有标记为PUT@CreatedAt的字段时调用@ChangedAt端点将这些字段设置为null。我通过用updatable = false注释那些字段来解决这个问题。
  2. 用随机(和不正确的)POST@CreatedBy@CreatedAt@ChangedBy调用@ChangedAtendpoint忽略这些值并正确设置这些值的值。
  3. 使用POST的一些随机值调用@Version端点会将不正确的值设置到字段中。我已经尝试设置insertable = false但由于非null约束而无效。

到目前为止,我很困惑如何确保这些字段不会被来自其他端点的错误请求主体损坏。任何帮助表示赞赏。

spring-data-jpa spring-data-rest
1个回答
2
投票

由于这些属性不应由客户端修改,因此您应将其标记为只读。

@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();
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.