4

これもかなり簡単なことのように思えますが、どうすればよいのか、また苦労しています。

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"
}
4

1 に答える 1

3

Userデフォルトでは null 値はマーシャリングされないため、部分的に入力されたオブジェクトをいつでも返すことができます。retrieveUserFromDBこれをメソッドに実装して、コピー手順を回避することもできます。

  @GET
  @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
  public Response getUser(String Id) {
    // Pseudo-code for retrieving user
    User userFromDB = retrieveUserFromDB(user);
    User user = new User();
    user.setUserName(userFromDB.getUserName());
    user.setUserEmail(userFromDB.getUserEmail());
    Response.status(200).entity(user);
  }

詳細については

于 2012-06-19T20:01:52.417 に答える