在 Spring 数据中设置不允许的字段

Set disallowed fields in Spring Data Rest

我想将某些字段从 POST 排除到我的存储库中。

比如我想自己设置版本,这样用户就不能自己设置这个字段。

例如下面的class。

@Entity
public class User {

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

    @CreatedDate
    private LocalDateTime created;

    @LastModifiedDate
    private LocalDateTime lastModified;

    private String name;
}

我尝试使用 @ReadOnlyProperty 注释,但版本字段没有 setter。但是没有任何效果,用户仍然可以自己设置版本字段。我也试过像下面这样实现一个全局初始化器,但没有成功。不过活页夹被捡起来了。

@ControllerAdvice
public class GlobalInitializer {

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

您应该将@JsonIgnore 放在字段和setter 上,并将@JsonProperty("propertyName") 放在getter 上。

刚刚测试 - 适合我:

@JsonIgnore
@LastModifiedDate
private LocalDate lastUpdated;

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

@JsonIgnore
public void setLastUpdated(LocalDate lastUpdated) {
    this.lastUpdated = lastUpdated;
}