我需要使用RestTemplate
调用API以获取JSON,该JSON应自动转换为Java对象。
一个示例JSON看起来像这样
{
"ParsedResults": [
{
"TextOverlay": {
"Lines": [],
"HasOverlay": false,
"Message": "Text overlay is not provided as it is not requested"
},
"TextOrientation": "0",
"FileParseExitCode": 1,
"ParsedText": "Translated message",
"ErrorMessage": "",
"ErrorDetails": ""
}
],
"OCRExitCode": 1,
"IsErroredOnProcessing": false,
"ProcessingTimeInMilliseconds": "1296",
"SearchablePDFURL": "Searchable PDF not generated as it was not requested."
}
我还创建了一个类,以在我调用所需的API时映射所有数据(为清晰起见,未包含getter和setter)。
public class OCRResponse {
@JsonProperty("ParsedResults")
private List<ParsedResults> parsedResults;
@JsonProperty("OCRExitCode")
private String OCRExitCode;
@JsonProperty("IsErroredOnProcessing")
private boolean isErroredOnProcessing;
@JsonProperty("ProcessingTimeInMilliseconds")
private Long processingTimeInMilliseconds;
@JsonProperty("SearchablePDFURL")
private String searchablePDFURL;
}
上面的类包含一个由以下字段组成的对象的集合,它应表示JSON中显示的数组。
public class ParsedResults {
@JsonProperty("TextOverlay")
private TextOverlay textOverlay;
@JsonProperty("TextOrientation")
private String textOrientation;
@JsonProperty("FileParseExitCode")
private String fileParseExitCode;
@JsonProperty("ParsedText")
private String parsedText;
@JsonProperty("ErrorMessage")
private String errorMessage;
@JsonProperty("ErrorDetails")
private String errorDetails;
}
此文件由我制作了另一个类来映射JSON的另一部分,但我不知道这是否重要,因此除非有人需要,否则我不会粘贴它。
现在,问题是,如果我启动应用程序并进行调用,则OCRResponse
对象将拥有ParsedResults
对象之外的所有数据。
OCRResponse response = restTemplate.getForEntity(uriBuilder.toUriString(), OCRResponse.class).getBody();
System.out.println(response.getSearchablePDFURL()); //null (correct)
System.out.println(response.isErroredOnProcessing()); //true (correct)
System.out.println(response.getProcessingTimeInMilliseconds()); //406 (correct)
System.out.println(response.getOCRExitCode()); //99 (correct)
System.out.println(response.getParsedResults()); //null (invalid result)
我尝试将List<ParsedResults> parsedResults
更改为
ArrayList<ParsedResults> parsedResults;
ArrayList<ParsedResults> parsedResults = new ArrayList<>();
ParsedResults[] parsedResults;
ParsedResults parsedResults //As I should get only one element in my collection anyway
但是这些都不起作用,我不断得到NullPointerException
或IndexOutOfBoundsException
我很确定使用这种方法可以实现我的目标,因为如果我没记错的话,我在学习期间做了类似的事情。 有人可以帮我弄清楚这里出什么问题吗?