3

ローカルのJSONファイルを解析し、RestTemplateを使用してモデルにマーシャリングしたいのですが、これが可能かどうかわかりません。

サーバーとの同期にRestTemplateを使用しているAndroidアプリにデータベースを事前入力しようとしています。ローカルJSONを自分で解析するのではなく、RestTemplateを使用してみませんか?JSONをモデルに解析するために正確に作成されています。

しかし...これを行う方法があるかどうかは、ドキュメントからはわかりません。MappingJacksonHttpMessageConverterサーバーのhttp応答をモデルに変換するように見えるクラスがあります...しかし、ローカルファイルで動作するようにそれをハックする方法はありますか?やってみましたが、うさぎの穴をどんどん深くなっていきましたが、運が悪かったです。

4

2 に答える 2

3

これを理解しました。RestTemplateを使用する代わりに、Jacksonを直接使用できます。RestTemplateがこれに関与する必要がある理由はありません。とても簡単です。

try {
    ObjectMapper mapper = new ObjectMapper();

    InputStream jsonFileStream = context.getAssets().open("categories.json");

    Category[] categories = (Category[]) mapper.readValue(jsonFileStream, Category[].class);

    Log.d(tag, "Found "  + String.valueOf(categories.length) + " categories!!");
} catch (Exception e){
    Log.e(tag, "Exception", e);
}
于 2012-07-31T22:53:58.440 に答える
1

はい、可能だと思います(MappingJacksonHttpMessageConverterを使用)。

MappingJacksonHttpMessageConverterread()2つのパラメータを取るメソッドがあります:ClassHttpInputMessage

MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();
YourClazz obj = (YourClazz) converter.read(YourClazz.class, new MyHttpInputMessage(myJsonString));

このメソッドを使用すると、単一のjsonメッセージから単一のオブジェクトを読み取ることができますが、YourClazzはいくつかのコレクションになる可能性があります。

次に、独自のHttpInputMessage実装を作成する必要があります。この例では、jsonを文字列として想定していますが、おそらくストリームをjsonファイルに渡すことができます。

public class MyHttpInputMessage implements HttpInputMessage {

    private String jsonString;

    public MyHttpInputMessage(String jsonString) {
        this.jsonString = jsonString;
    }

    public HttpHeaders getHeaders() {
        // no headers needed
        return null;
    }

    public InputStream getBody() throws IOException {
        InputStream is = new ByteArrayInputStream(
                jsonString.getBytes("UTF-8"));
        return is;
    }

}

PS。あなたはデータベースであなたのアプリを公開することができます

于 2012-07-31T21:34:02.143 に答える