Обработка полей @CreatedBy, @CreatedAt, @ChangedBy, @ChangedAt и @Version с помощью spring-data-rest - PullRequest
0 голосов
/ 22 февраля 2019

У меня проблемы с проверкой данных в полях, помеченных @CreatedBy, @CreatedAt, @ ChangedBy , @ ChangedAt and @ Version while using spring-data-rest`.Он ведет себя неожиданным образом.

  1. Вызов конечной точки PUT, когда в теле нет полей, помеченных @CreatedAt и @ChangedAt, устанавливает эти поля в null.Я обошел это, пометив эти поля с помощью updatable = false.
  2. Вызов конечной точки POST со случайным (и неправильным) @CreatedBy, @CreatedAt, @ChangedBy, @ChangedAt игнорирует эти полязначения и правильная установка значений для этих значений.
  3. Вызов конечной точки POST с некоторым случайным значением для @Version устанавливает это неверное значение в поле.Я попытался установить insertable = false, но это не сработало из-за ненулевого ограничения.

В этот момент я запутался, как убедиться, что эти поля не повреждены неправильными телами запросов изостальные конечные точки.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 22 февраля 2019

Поскольку эти свойства не должны изменяться клиентом, вы должны пометить их как доступные только для чтения.

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

Вы можете сделать это непосредственно в сущности или, чтобы избежать необходимости вводить аннотации Джексона вваши сущности, вы можете управлять через класс Джексона Миксина

См .: https://dzone.com/articles/jackson-mixin-to-the-rescue

Вы можете зарегистрировать миксин, используя следующую конфигурацию:

@Configuration
public class RepositoryConfiguration {

    @Autowired
    private Jackson2ObjectMapperBuilder objectMapperBuilder;

    @Bean
    public ObjectMapper objectMapper() {
        objectMapperBuilder.mixIn(SomeClass.class, SomeClassMixin.class);

        return objectMapperBuilder.build();
    }

}
...