【问题标题】:Not getting external Json API response using RestTemplate没有使用 RestTemplate 获得外部 Json API 响应
【发布时间】:2021-09-18 04:55:24
【问题描述】:

获取外部 API 如下图- [1]:https://i.stack.imgur.com/a28Y1.png

{
"status" : 200,
"data" : [ 
{
"_id": "StringValue1",
"itmId": "StringValue1",
"itmName": "StringValue1",
"imgFileName":"StringValue1",
"imgFile":"byte[] data"
},
{
"_id": "StringValue2",
"itmId": "StringValue2",
"itemName": "StringValue2",
"imgFileName":"StringValue2",
"imageFile":"byte[] data2"
}
],
"message":""
}

用作数据数组对象。

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Response {     
public String status;
Data [] data;
public String message
}

另一个物体在下面

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Data{              
public String _id;
public String itmid;
public String itmName;
public String imgFileName;
byte [] imgFile;
}

使用 /getForObject/exchange/getForEntity 但没有得到任何响应。请检查我使用的底部方法。

现在用作数据对象列表也没有得到任何响应-

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Response {     
public String status;
List<Data> data;
public String message
}


@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Data{              
public String _id;
public String itmid;
public String itmName;
public String imgFileName;
byte [] imgFile;
}

这里是如何被resttemplate调用的-

  1. 响应 obj=restTemplate.getForObject(uri, Response.class,"paramvalue");
  2. ResponseEntity obj=restTemplate.exchange(uri, HttpMethod.GET,null,Response.class,"paramvalue");
  3. ResponseEntity obj=restTemplate.getForEntity(uri, Response.class,"paramvalue");

尝试了所有可能的方法,但没有从外部 rest API 得到任何响应。

请注意响应 json conatin data[] 我们有图像的字节数据。 需要支持和帮助请..

有人可以支持吗? 提前致谢。

【问题讨论】:

  • 试过了,但如果我打电话,我只会得到对象引用响应为 Response@5ffead27 - ResponseEntity obj=template.getForEntity(uri,Response.class,"param")
  • Data[] obj 或 List obj,如果我进行更改并调用 resttemplate 所有场景我没有得到响应,不知道为什么?
  • 请在下面找到我的答案,让我知道它有帮助

标签: json spring-boot resttemplate


【解决方案1】:

您可以通过以下方式实现您的目标:

ResponseEntity<List<Data>> responseEntity = 
  restTemplate.exchange(
    BASE_URL,
    HttpMethod.GET,
    null,
    new ParameterizedTypeReference<List<Data>>() {}
  );
List<Data> data = responseEntity.getBody();

如果有帮助请告诉我

【讨论】:

  • 非常感谢您的支持和帮助,但我的数据对象在响应对象中。因为,响应对象持有两个参数状态和消息。再次提前。
  • Response 是自定义对象还是普通的http响应对象?如果是正常的 http 响应对象,那么您可以通过 responseEntity.getStatus() 访问状态
  • 响应对象是 CustomObject,它与 Data 对象一起包含一些额外的字段。 Data 对象还包含一个名为 byte [] 的字段。
  • 您可以尝试我的答案一次以确保响应类型,然后您也可以尝试以下方法:ResponseEntity&lt;Response&gt; response = restTemplate.getForEntity(uri, Response.class);
  • 非常感谢 Felix 给予您宝贵的时间。如果我像下面这样打电话,我只会得到响应 object ref@1fa268de ResponseEntity response = restTemplate.getForEntity(uri, Response.class,"paramvalue "); response.getBody();这个方法我也试过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2015-05-05
  • 2016-08-19
  • 2023-02-23
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
相关资源
最近更新 更多