Spring Data REST对只读属性的支持

4
我们的存储库实体具有审计/日志属性,例如创建日期、更新日期等,这些属性由应用分配,并且应该是只读属性,不提供给用户。在Jackson上进行一点研究后发现这个功能不被支持(还是被支持了?)。想知道SDR是否能提供帮助?
更新1:添加实体以获得详细信息:
@Document(collection="employees")
public class Employee {

    @Id
    private String id;
    private firstName;
    private lastName;

    //read-only attribute. initially assigned by application and should not be changed
    private Date createdDate;

    //read-only attribute. initially assigned by application and should not be changed
    private Employee createdBy;

    //getters setters truncated....
}
3个回答

2

1
我认为这并没有达到所述的目标,因为这完全阻止了属性的写入。然而,所要求的是在从REST API发送时防止属性被写入,但仍允许应用程序以编程方式设置这些属性。 - M. Justin

1
你链接的Jackson问题(jackson-databind#95)已经得到解决。该功能允许使用@JsonIgnoreProperties(allowGetters=true)在写入JSON时包含数据,但在读取时排除它。
仅凭这个功能还不足以使Spring Data REST忽略属性,因为更新时这些属性将始终为null

1
对我来说没问题,我会在其中一个事件监听器中更新“创建者”和“修改者”。谢谢,我给你点赞! - undefined

0
使用spring-data-jpa和spring-data-rest,我成功地使用了jpa@Column(updatable = false)。
看起来你没有使用JPA(@Document),你的持久化框架有指示只读字段的注释吗?
此外,只有getter而没有setter可能是问题的一部分。在我的情况下,spring-data-jpa的AuditingEntityListener设置了该字段,因此我不需要在应用程序代码中使用setter。
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;

import org.joda.time.DateTime;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
@MappedSuperclass
public abstract class AuditedEntity extends AuditedUpdateEntity {

    @CreatedDate
    @Column(updatable = false)
    private DateTime createdTs;

    @CreatedBy
    @Column(updatable = false)
    private String createdBy;

    public String getCreatedBy() {
        return createdBy;
    }

    public DateTime getCreatedTs() {
        return createdTs;
    }

}

  1. 我需要使用Spring Mongo @Document。
  2. 我需要setter,因为应用程序代码会为这些属性分配值。它们对客户端只读。
- Stackee007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接