2

RESTEasy クライアントを使用して API から JSON 文字列を取得しています。JSON ペイロードは次のようになります。

{
  "foo1" : "",
  "foo2" : "",
  "_bar" : {
    "items" : [
      { "id" : 1 , "name" : "foo", "foo" : "bar" },
      { "id" : 2 , "name" : "foo", "foo" : "bar" },
      { "id" : 3 , "name" : "foo", "foo" : "bar" },
      { "id" : 4 , "name" : "foo", "foo" : "bar" }
    ]
  }
}

itemsここで、オブジェクト マッピング用のノードのみを抽出したいと思います。itemsJSON 応答本文をインターセプトし、ルート ノードとして 持つように変更する最良の方法は何ですか?

API メソッドにRESTEasy プロキシ フレームワークを使用しています。

REST クライアント コード:

ResteasyWebTarget target = client.target("https://"+server);
target.request(MediaType.APPLICATION_JSON);
client.register(new ClientAuthHeaderRequestFilter(getAccessToken()));
MyProxyAPI api = target.proxy(MyProxyAPI.class);
MyDevice[] result = api.getMyDevice();

RESTEasy プロキシ インターフェイス:

public interface MyProxyAPI {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/device")
    public MyDevice[] getMyDevices();

    ...
}
4

2 に答える 2

3

必要以上に多くのフィールドを含むメッセージ用に複雑な Java クラスを定義する必要がないようにしたいという同じ願望がありました。私の JEE サーバー (WebSphere) では、Jackson が基盤となる JSON 実装であり、RESTEasy のオプションのようです。Jackson には、不明な JSON フィールドを無視できる@JsonIgnorePropertiesアノテーションがあります。

import javax.xml.bind.annotation.XmlType;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;

@XmlType
@JsonIgnoreProperties(ignoreUnknown = true)
public class JsonBase {}

他の JSON 実装に同様の機能があるかどうかはわかりませんが、それは確かに自然なユースケースのようです。

(これと、WebSphere 環境に関連するその他の JAX-RS 手法をブログに投稿しました。)

于 2016-09-09T14:13:01.110 に答える