我有一个包含用户名和电子邮件地址的实体类。对于我的应用程序的某些部分,我需要一个具有id,用户名和电子邮件地址的用户列表。对于其他部分,我需要一个列表,没有通过网络发送的特定字段(在这种情况下是电子邮件地址)。是否有一个注释可以放在一个方法上,该方法限制了我可以放在getListWithoutEmails方法上创建的对象图?
即。 @LimitTo(value = {“id”,“username”})或@Ignore(value = {“emailAddress”})
环境是Wildfly及其预先捆绑的JAX-RS。
这是实体类
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class User {
@XmlElement
private Long id;
@XmlElement
private String username;
@XmlElement
private String emailAddress;
}
这是JAX-RS类
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("userList")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class UserList {
@GET
@Path("/getListWithEmails/{start:\\d+}/{limit:\\d+}/{sortColumn}/{sortDirection}")
@HasRoleEmailReader
public List<User> getListWithEmails(@PathParam("start")
final int start, @PathParam("limit")
final int limit, @PathParam("sortColumn")
final String sortColumn, @PathParam("sortDirection")
final String sortDirection) {
getUsers(...);
}
@GET
@Path("/getListWithoutEmails/{start:\\d+}/{limit:\\d+}/{sortColumn}/{sortDirection}")
public List<User> getListWithoutEmails(@PathParam("start")
final int start, @PathParam("limit")
final int limit, @PathParam("sortColumn")
final String sortColumn, @PathParam("sortDirection")
final String sortDirection) {
getUsers(...);
}
...
}
答案 0 :(得分:0)
JAX-RS不负责序列化自定义返回类型,因此您还应该查看用于实际序列化过程的任何框架。由于我不知道使用了什么库,因此我给出了一些应该达到您想要实现的目标的一般步骤:
MessageBodyWriter
- 您可以添加@Produce
以将其限制为JSON返回类型。isWritable
,在此处查看注释的annotations
参数。writeTo
。如果存在注释,则自定义序列化过程。如何执行此操作取决于您使用的序列化库。也许它有一个忽略属性的功能,也许你需要手工完成。@Provider
添加到资源类以使用编写器。