在 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;
}
我想将某些字段从 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;
}