我想解析一个本地JSON文件并使用RestTemplate将其编组到模型中,但无法判断这是否可行。
我正在尝试在使用RestTemplate与服务器同步的Android应用上预先填充数据库。我想,为什么不使用RestTemplate,而不是自己解析本地JSON?它完全用于将JSON解析为模型。
但是......我无法从文档中看出是否有任何办法可以做到这一点。有MappingJacksonHttpMessageConverter
类似乎将服务器的http响应转换为模型......但有没有办法破解它与本地文件一起使用?我试过了,但是在兔子洞里越来越深,没有运气。
答案 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()
有两个参数:Class
和HttpInputMessage
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;
}
}