3

我想解析一个本地 JSON 文件并使用 RestTemplate 将其编组为模型,但不知道这是否可能。

我正在尝试在使用 RestTemplate 与服务器同步的 Android 应用程序上预填充数据库。我想,与其自己解析本地 JSON,不如使用 RestTemplate?它专门用于将 JSON 解析为模型。

但是......我无法从文档中判断是否有任何方法可以做到这一点。有一个MappingJacksonHttpMessageConverter类似乎可以将服务器的 http 响应转换为模型……但是有没有办法破解它来处理本地文件?我试过了,但一直越陷越深,没有运气。

4

2 回答 2

3

想通了。您可以直接使用 Jackson,而不是使用 RestTemplate。没有理由 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)。

MappingJacksonHttpMessageConverter具有read()采用两个参数的方法: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 回答