繁体   English   中英

如何在运行时在JAX-RS中返回没有实体ID或给定属性的XML / JSON表示形式?

[英]How to return XML/JSON representation without the entity ID or a given attribute in JAX-RS at runtime?

考虑这个实体:

@Entity
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class User {

@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private int id;

private String username;

private String password;

// getters and setters

}

@Path("/users")
@Stateless
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public class UserService {


@GET
@PATH("all")
//return list of all usernames

@GET
@PATH("{id}"}
//get a single user object
}

现在xml或JSON返回包含id元素;

<user>
   <id>343</id>
   <username>name</username>
   <password>pwd</password>
</user>

Q1)问题是在资源生成期间(当GET请求进入时),是否有可能从返回xml对象中删除id元素。 在这里,我知道在部署时我想从xml中删除id属性。

我可以做以下事情; 但是问题是我必须在更改其ID属性之前先分离该实体,并且我不确定该如何完成(因为它是容器管理的)

 @GET
@Path("{id}")
public User getUser(@PathParam("id") int id){
      User u = u=em.find(User.class, id);
      //detach the object u
      u.setId(-9999)
     return u;
}

Q2)更高一步,是否有可能根据运行时所需的属性返回User对象,例如: www.foo.com/users/1?att=username

在这里,我指定仅需要ID为1的User对象的属性用户名。在我的GET请求方法中,我可以执行以下操作,但是这对我来说很脆弱。 我想有一个更清洁的解决方案。

@GET
@Path("{id}")
public User getUser(@PathParam("id") int id, @QueryParam("att") String attribute){
      User u = u=em.find(User.class, id);
      User u2= null;
      if (attribute==null){ 
          return u;
      }
       else if (att="id") {
         u2.setUserName(u.getUserName());
         u2.setUserPassword(u.getUserPassword());
       } else if (att="password"){
          //same logic as above
         } else if (att="username") {

          }
             return u2;
}

}

谢谢

“ Q1)问题是在资源生成期间(当GET请求进入时),是否可以从返回xml对象中删除id元素。在这里,我知道在部署时我想从xml中删除id属性”。

您可以简单地使用@XmlTransient

@XmlTransient批注对于解决JavaBean属性名称和字段名称之间的名称冲突或防止字段/属性的映射非常有用

@Id
@XmlTransient
@GeneratedValue(strategy= GenerationType.AUTO)
private int id;

“ Q2)更高一步,是否有可能根据运行时所需的属性返回User对象,例如: www.foo.com/users/1?att=username

就这个问题而言,除了您当前正在执行的操作(假设您仍然需要xml响应)之外,我没有看到任何真正的“优雅”方式来做到这一点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM