使用RestTemplate解析本地JSON文件

时间:2012-07-31 20:06:10

标签: java android spring resttemplate

我想解析一个本地JSON文件并使用RestTemplate将其编组到模型中,但无法判断这是否可行。

我正在尝试在使用RestTemplate与服务器同步的Android应用上预先填充数据库。我想,为什么不使用RestTemplate,而不是自己解析本地JSON?它完全用于将JSON解析为模型。

但是......我无法从文档中看出是否有任何办法可以做到这一点。有MappingJacksonHttpMessageConverter类似乎将服务器的http响应转换为模型......但有没有办法破解它与本地文件一起使用?我试过了,但是在兔子洞里越来越深,没有运气。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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。 You can publish your app with database