これもかなり簡単なことのように思えますが、どうすればよいのか、また苦労しています。
HTTP POST および GET メソッドが関連付けられた Jersey/JAXB アノテーションを含む POJO があります。POJO で POST を実行すると、要求本文は JSON として送信され、基本的に POJO をモデル化します。GET を実行するとき、POJO を返したいのですが、POJO プロパティのサブセットのみを使用します。
GET に必要のないプロパティで @XmlTransient を使用しようとしましたが、HTTP POST 中にそれらのプロパティを使用できません。
まず、これが私の POJO (User.java) です。
import javax.xml.bind.annotation.*
@XmlRootElement
public class User {
private String userName;
private String userEmail;
private String userType; // Do not return this property in GET
private String userTmpPassword; // Do not return this property in GET
// User constructor
public User(String userName,...) {
this.userName = userName;
//...etc...
}
// getters and setters with @XmlElement on each attribute
//...etc...
@XmlElement(name="user_name")
public String getUserName() {
return userName;
}
public String setUserName() {
return userName;
}
//...etc...
}
これが私の RESTful サービス クラスです。
public class userService{
@POST
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getUser(User userInfoAsJSON) {
User user = new User(userInfoAsJSON.getUserName(), ...);
// pseudo-code for persisting User
writeUserToDB(user);
return Response.status(200);
}
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getUser(String Id) {
// Pseudo-code for retrieving user
User user = retrieveUserFromDB(user);
Response.status(200).entity(user);
}
}
予想どおり、HTTP GET に対する JSON 応答は、次のように User のすべてのプロパティを返します。
{
"user_name": "John Doe",
"user_email": "john_doe@johndoe.com",
"user_type": "Admin",
"user_tmp_password": "abc_xyz"
}
一方、JSON 応答でいくつかの属性のみを返したいと思います。
{
"user_name": "John Doe",
"user_email": "john_doe@johndoe.com"
}