Установите запрещенные поля в Spring Data Rest

Я хочу исключить определенные поля из POST в мои репозитории.

Например, я хочу установить версию самостоятельно, чтобы пользователи не могли установить это поле самостоятельно.

Например, в классе ниже.

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @CreatedDate
    private LocalDateTime created;

    @LastModifiedDate
    private LocalDateTime lastModified;

    private String name;
}

Я пытался использовать @ReadOnlyProperty аннотации и не имея установщика для поля версии. Но ничего не получалось, пользователи все еще могут сами устанавливать поля версий. Я также попытался реализовать глобальный инициализатор, как показано ниже, но безуспешно. Связыватель подобран хотя.

@ControllerAdvice
public class GlobalInitializer {

    @InitBinder
    public void globalBinder(WebDataBinder webDataBinder) {
        webDataBinder.setDisallowedFields("name");
    }
}

1 ответ

Решение

Вы должны поместить @JsonIgnore в поле и в сеттер, а @JsonProperty("propertyName") в геттер.

Только что проверил - у меня работает:

@JsonIgnore
@LastModifiedDate
private LocalDate lastUpdated;

@JsonProperty("lastUpdated")
public LocalDate getLastUpdated() {
    return lastUpdated;
}

@JsonIgnore
public void setLastUpdated(LocalDate lastUpdated) {
    this.lastUpdated = lastUpdated;
}
Другие вопросы по тегам