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

时间:2019-02-22 06:26:04

标签: spring-data-jpa spring-data-rest

我无法确保以@CreatedBy@CreatedAt,@ ChangedBy , @ ChangedAt and @ Version while using注释的字段中的数据-休息`。它的行为方式出乎意料。

  1. 在主体没有标记为PUT@CreatedAt的字段时调用@ChangedAt端点会将这些字段设置为null。我通过用updatable = false注释这些字段来解决此问题。
  2. 用随机(且错误)的POST@CreatedBy@CreatedAt@ChangedBy呼叫@ChangedAt端点会忽略这些值并正确设置以下值:这些值。
  3. 使用POST的某个随机值调用@Version端点会将该错误值设置为该字段。我尝试设置insertable = false,但是由于不是null约束而无法正常工作。

在这一点上,我很困惑如何确保这些字段不会被其余端点的错误请求主体破坏。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

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

@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String someField;

您可以直接在Entity上执行此操作,或者为了防止不得不向实体引入Jackson批注,可以通过Jackson Jackson类来处理。

请参阅: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();
    }

}