【发布时间】:2016-11-09 01:12:02
【问题描述】:
我正在寻找一种将一些 JPA 实体导出到 REST API 的方法,但不是每次我想根据入口点共享一些特定字段时都发送整个实体。这是一个小例子:
假设我们有一个带有少量字段的 Author 类:
@Entity
public class Author implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = SEQUENCE)
private Long id;
@NotNull
@Size(min = 1, message = "{required.field}")
private String name;
@NotNull
@Size(min = 1, message = "{required.field}")
private String country;
private LocalDate birthDate;
// getters and setters
}
假设我们有这个 REST 服务(只有两种方法):
@Path("authors")
public class AuthorREST {
@Inject
private AuthorBC bc;
@GET
@Produces("application/json")
public List<Author> find(@QueryParam("q") String query) throws Exception {
List<Author> result;
if (Strings.isEmpty(query)) {
result = bc.findAll();
} else {
result = bc.find(query);
}
return result;
}
@GET
@Path("{id}")
@Produces("application/json")
public Author load(@PathParam("id") Long id) throws Exception {
Author result = bc.load(id);
if (result == null) {
throw new NotFoundException();
}
return result;
}
}
现在,这样一来,当我的 API 被调用时,我将始终拥有 4 个字段。
我了解,如果我使用 Jackson,我可以将 @JsonIgnore 设置为我想忽略的字段,并且它们将始终被忽略。
但是如果我想要这样的话,在某些情况下,我的整个实体由一个服务返回,而在其他服务(或同一服务中的其他方法)中,只返回 2 或 3 个字段?
有办法吗?
【问题讨论】:
标签: java rest jpa jackson jax-rs