我目前正在开发一个我@Entity
看起来像 的网络项目
@Entity
@Table(name = "variable")
@XmlRootElement
public class Variable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(unique = true, nullable = false)
private String name;
@Column
@Enumerated(EnumType.STRING)
private VariableType type;
@Column(nullable = false)
private String units;
@Column
private String description;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_on", nullable = false)
private Date createdOn;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "retired_on", nullable = true)
private Date retiredOn;
@Column(nullable = false)
private boolean core;
}
要将这个对象转换为 JSON,我正在连接我的实体,@XmlRootElement
并将其绑定到JAXB
我的REST
调用方法看起来像
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getVariables() {
return Response.ok(variableManager.getVariables()).build();
}
这种方法存在一些问题:
- 它将持久性与表示层紧密结合。如果后端发生变化,它将在表示层上导致/暴露相同的事情。不可取
- 表示层上的返回数据可能比在这种情况下不可行的实体更少/更多(另一个对象的复合)数据
在一个典型的 Web 应用层中,通常有 3 层
presentation/
business/
persistence/
定义表示、将对象转换为 JSON/XML 的决定应该在表示层上。我正在寻找可以将我的对象转换为XML/JSON
而不使用将它们绑定到持久层的方法@XmlRootElement
请分享你的想法