在Spring MVC中使用事件实例作为表单支持对象会是一种不好的做法吗?
与DTO相比,这种方法的一个问题是,客户端可以更改视图中的隐藏字段,您需要检查并重置它们。 但是还有其他的吗?
@Entity @Table(name = "events") public class Event { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "event_id") public int id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") public User userId; @Column(name = "amount") @NotEmpty(message = "Amount can't be empty") public int amount; @Column(name = "description") @NotEmpty(message = "Description can't be empty") public String description; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "entered_by") public User enteredBy; @Column(name = "entered_at", columnDefinition = "DATETIME") @Temporal(TemporalType.TIMESTAMP) public Date enteredAt; }
正如您所说,DTO的主要目标是隔离。 您并不总是希望客户端看到/访问数据库端的所有字段。
此外,您可以使用DTO聚合来自不同表/服务的多个调用,并使用一个表单对象将其返回到客户端。