java - 在 json 输出中获取对象时遇到问题

标签 java android json spring rest

我有一个应用程序,我使用 jackson 来解析 json 输出(我使用 spring for android 来进行 http REST 调用)。

这是以下 REST 调用的输出:

https://api.spreaker.com/v2/users/7725967/episodes?limit=1

{  
   "response":{  
      "items":[  
         {  
            "episode_id":9074409,
            "type":"RECORDED",
            "title":"Seerah",
            "duration":4608260,
            "show_id":1530711,
            "author_id":7725967,
            "site_url":"https:\/\/www.spreaker.com\/episode\/9074409",
            "image_url":"https:\/\/d1bm3dmew779uf.cloudfront.net\/large\/4c3b84b16338c57af8500fea88ef5313.jpg",
            "image_original_url":"https:\/\/d3wo5wojvuv7l.cloudfront.net\/images.spreaker.com\/original\/4c3b84b16338c57af8500fea88ef5313.jpg",
            "published_at":"2016-07-28 01:07:18",
            "download_enabled":true,
            "waveform_url":"https:\/\/d3770qakewhkht.cloudfront.net\/episode_9074409.gz.json?v=2GDXyK"
         }
      ],
      "next_url":"https:\/\/api.spreaker.com\/v2\/users\/7725967\/episodes?filter=listenable&last_id=9074409&limit=1"
   }
} 

在我的应用程序中,我进行以下休息调用(这是代码):

public class HttpRequestTask extends AsyncTask<Void, Void, RadioInfo> {
        @Override
        protected RadioInfo doInBackground(Void... params) {
            try {
                final String url = "https://api.spreaker.com/v2/users/7725967/episodes?limit=1";
                RestTemplate restTemplate = new RestTemplate();
                ObjectMapper objectMapper = new ObjectMapper();
                objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
                restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
                //String result = String.valueOf(restTemplate.getForObject(url, RadioInfo.class));
                return restTemplate.getForObject(url, RadioInfo.class);
            } catch (Exception e) {
                Log.e("MainActivity", e.getMessage(), e);
            }

            return null;
        }

我得到的错误如下:

Could not read JSON: Unrecognized field "response" (class software.blackstone.masjidtawheedmobileradio.RadioInfo), not marked as ignorable (3 known properties: "title", "type", "episode_id"])
                                                                                              at [Source: buffer(com.android.okhttp.okio.GzipSource@1058630).inputStream(); line: 1, column: 14] (through reference chain: software.blackstone.masjidtawheedmobileradio.RadioInfo["response"]); nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "response" (class software.blackstone.masjidtawheedmobileradio.RadioInfo), not marked as ignorable (3 known properties: "title", "type", "episode_id"])
                                                                                              at [Source: buffer(com.android.okhttp.okio.GzipSource@1058630).inputStream(); line: 1, column: 14] (through reference chain: software.blackstone.masjidtawheedmobileradio.RadioInfo["response"])
                                                                                          org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "response" (class software.blackstone.masjidtawheedmobileradio.RadioInfo), not marked as ignorable (3 known properties: "title", "type", "episode_id"])
                                                                                              at [Source: buffer(com.android.okhttp.okio.GzipSource@1058630).inputStream(); line: 1, column: 14] (through reference chain: software.blackstone.masjidtawheedmobileradio.RadioInfo["response"]); nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "response" (class software.blackstone.masjidtawheedmobileradio.RadioInfo), not marked as ignorable (3 known properties: "title", "type", "episode_id"])
                                                                                              at [Source: buffer(com.android.okhttp.okio.GzipSource@1058630).inputStream(); line: 1, column: 14] (through reference chain: software.blackstone.masjidtawheedmobileradio.RadioInfo["response"])
                                                                                              at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readInternal(MappingJackson2HttpMessageConverter.java:126)
                                                                                              at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:147)
                                                                                              at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:76)
                                                                                              at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:484)
                                                                                              at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)
                                                                                              at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:237)
                                                                                              at software.blackstone.masjidtawheedmobileradio.MainActivity$HttpRequestTask.doInBackground(MainActivity.java:180)
                                                                                              at software.blackstone.masjidtawheedmobileradio.MainActivity$HttpRequestTask.doInBackground(MainActivity.java:170)

如何解决这个问题?

更新:

这是 RadioInfo 类:

公共(public)类RadioInfo{

private String episode_id;
private String type;
private String title;

public String getId() {
    return this.episode_id;
}

public String getType() {
    return this.type;
}

public String getTitle() {
    return this.title;
}

}

最佳答案

根据您的 JSON,您的 POJO 类应该是:

public class RadioInfo {
    private Response response;
    // getters setters
}

public class Item {
    private Integer episodeId;
    private String type;
    private String title;
    //getter setters
}



public class Response {
    private List<Item> items = new ArrayList<Item>();
    private String nextUrl;
    //getters setters
}

关于java - 在 json 输出中获取对象时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38637399/

相关文章:

android - 如何在 AutoCompleteTextView 中定位光标

android - Phonegap - 设置 Phonegap

java - 如何让 Android 设备振动?不同频率?

javascript - 在 HTML 结构中打印 JSON 数据问题

python - 如何将 JSON 列表转换为 CSV 文件中的两个不同列?

java - Wicket 1.5 从 javascript 调用 wicket

java - 在 onStopTrackingTouch 中获得进度,而不是在搜索栏中的 onProgressChanged 中获得进度

Java:jsp+hibernate 与 eclipse。示例应用程序?

java - 如何创建 JPanel 作为主类

javascript - JSONArray JSP Ajax Jquery