java - Jersey 。在 REST 请求的响应中隐藏一些 POJO 字段的好方法

标签 java rest jersey

让我们假设以下示例。 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/

相关文章:

java - 使用 Jersey 防止对象属性内的空值

java - 为每个客户端维护与 jersey CLIENT 的 cookie session

javax.xml.ws.WebServiceException : java. io.IOException:写入服务器 Tomcat 8 时出错

java - 面试题: Check if one string is a rotation of other string

javascript - AngularJS 进行 REST 调用并在浏览器中显示结果

c# - HttpClient.DeleteAsync 和 Content.ReadAdStringAsync 总是返回 null

java - Facebook:获取 session key 时签名不正确 (104)

java - 其余输出与控制台与 Tomcat localhost 不同

java - 过滤掉 JPA 查询中的嵌套对象

java - Spring boot JPA空指针异常