让我们假设以下示例。 POJO 类:
@XmlRootElement
public class User {
private String id;
private String email;
private String password;
private String firstName;
private String lastName;
// getters and setters
}
资源类:
@Path("user")
public class UserResource {
private UserRepository userRepository = new UserRepositoryStub();
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public User createUser(User user) {
return userRepository.create(user);
}
@GET
@Path("{objectId}")
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Response getManagedObject(@PathParam("objectId") String objectId) {
if (objectId == null) {
return Response.status(Response.Status.BAD_REQUEST).build();
}
User user = userRepository.findUser(objectId);
if (user == null) {
return Response.status(Response.Status.NOT_FOUND).build();
}
// Possible, but seems that not nice solution
// user.setPassword(null);
return Response.ok().entity(user).build();
}
}
在这个简单的示例中,我希望 GET 请求 {url}/user/12345 不返回密码字段。我评论了一种我不喜欢的解决方案。
一般来说,在处理 API 时,我希望为每个请求配置 POJO 字段的可见性。有没有一种优雅的方式来实现这一点?
最佳答案
创建一个 TransferObject,即 TO 或 DTO,其中包含您希望用户在 JSON 响应中显示的字段。您可以在字段上使用 @JsonIgnore,JSON 解析器不会解析该字段,因此不会包含在响应中。
关于java - Jersey 。在 REST 请求的响应中隐藏一些 POJO 字段的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042547/