1

現在、Restlet パッケージとその Jackson 拡張機能を使用して、RESTful サービスを使用する Java クライアントを作成しています。ユーザーのサービスをクエリし、User次のような POJOへの応答を逆シリアル化します。

@JsonIgnoreProperties(ignoreUnknown=true)
public class User {

    private Integer uid;    
    private String name;
    private String mail;
    private String field_nickname;

    // omitted for brevity: getters/setters, toString
}

サービスからのサンプル応答は次のようになります。

{
    "uid": "5",
    "name": "John Doe",
    "mail": "john@example.com",
    "field_nickname": {
        "und": [{
            "value": "jdoe",
            "format": null,
            "safe_value": "jdoe"
        }]
    }
}

Java クライアント コードは次のとおりです。

import org.restlet.resource.ClientResource;
public class TestClient {

    public static void main(String[] args) throws Exception {
        // Getting a User
        ClientResource cr = new ClientResource("http://localhost/rest/user/7.json")
        User user = cr.get(User.class);
        System.out.println(user);

        // Creating a User
        cr = new ClientResource("http://localhost/rest/user.json");
        User user = new User();
        user.setName("Jane Doe");
        user.setFieldNick("jdoe2");
        user.setMail("jdoe2@example.com");
        cr.post(user);
    }

uidnameおよびフィールドのシリアル化/逆シリアル化mailは非常に簡単で、問題はありません。私の問題は次のとおりです。フィールドには、常に同じように見える単一のエントリを持つfield_nickname配列が常に含まれています。und

Stringこのフィールドを値を保持するに逆シリアルfield_nickname[und][0][value]化し、属性をそのような配列にシリアル化するように Jackson に指示するにはどうすればよいですか?

4

1 に答える 1

0

これは一種の1回限りの構造変換であり、独自のハンドラーを作成する必要があります。最も簡単な方法は、おそらく次のようなものを実装することです。

@JsonProperty("field_nickname")
public void setNickname(NicknameWrapper[] wrapper) {
   field_nickname = wrapper[0].value;
}

@JsonIgnoreProperties(ignoreUnknown=true)
static class NicknameWrapper {
   public String value;
}

そしておそらく逆(getNickname())も。

于 2012-10-16T00:35:25.897 に答える