gpt4 book ai didi

java - 使用 Spring RestTemplate 发送返回数组的 get 请求

转载 作者:行者123 更新时间:2023-12-02 02:24:40 25 4
gpt4 key购买 nike

我想一次从 Nominatim 获取 50 个随机地址用于数据生成目的。我可以在不使用 Spring Framework 的情况下运行它,但我需要使用 Spring RestTemplate 来实现它。

每秒获取 50 个数据非常重要,因为 Nominatim 相当慢,而且我希望能够生成大量数据。

这可以一次给我 50 个回复:

public void processRequest() throws IOException, URISyntaxException {
do {
HttpGet httpGet = new HttpGet(getURI());
CloseableHttpResponse response = httpclient.execute(httpGet);
try {
this.responseAsString = responseToJsonString(response);
} finally {
response.close();
}
} while (this.responseAsString.equals(INVALID_LAT_LONG_RESPONSE));

我尝试关注this tutorial但这是行不通的。

使 ResponseEntity 为 String 类型仅返回我期望的 50 的第一个值。

{"place_id":78213552,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"way","osm_id":10055484,"lat":"32.920202","lon":"-97.528753","display_name":"Charles Avenue, Azle, Tarrant County, Texas, 76020, USA","class":"highway","type":"residential","importance":0.1,"address":{"road":"Charles Avenue","town":"Azle","county":"Tarrant County","state":"Texas","postcode":"76020","country":"USA","country_code":"us"}}

将其设为 String[] 会出现 406 Not Acceptable 错误。

ResponseEntity<String> response = this.restTemplate.exchange(
uri,
HttpMethod.GET,
null,
new ParameterizedTypeReference<String>() {}
);

当我尝试使用 Address POJO 以及尝试使用该类型的 Address[] 时,我都会遇到相同的 406 错误。

以下是地址 POJO 中的字段。每个字段都有一个 getter 和一个 setter(名称只是 Eclipse 提供的默认名称,因此它不会导致 Jackson 的解析出现问题)。

package com.bottomline.ml.generator.nominatimRequest;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Address {

@JsonProperty("place_id")
private long placeId;

@JsonProperty("licence")
private String licence;

@JsonProperty("osm_type")
private String osmType;

@JsonProperty("osm_id")
private String osmId;

@JsonProperty("lon")
private double longitude;

@JsonProperty("lat")
private double latitude;

@JsonProperty("display_name")
private String displayName;

@JsonProperty("class")
private String elementClass;

@JsonProperty("type")
private String elementType;

@JsonProperty("importance")
private double importance;

@JsonProperty("address")
private String addressDetails;

最佳答案

我明白了。作品如下:

HashMap<String, Object> params = getParams();
ResponseEntity<String> response = this.restTemplate.getForEntity(SEARCH, String.class, params);

其中 getParams() 是:

    private static HashMap<String, Object> getParams() {
Random rand = new Random();
String ids = "";
for (int i = 0; i < MAX_REQUESTS; i++) {
ids += "W" + Integer.toString(rand.nextInt(10000000) + 10000000) + ',';
}

HashMap<String, Object> params = new HashMap<String, Object>();
params.put("osmId", ids);
params.put("format", "json");

return params;
}

我有以下字段:

    private static String osmId = "&osm_ids={osmId}";
private static String format = "&format={format}";
private static String SEARCH = <your favorite nominatim server> + osmId + format;

将 URI 转换为字符串时很可能出现问题,导致参数中的逗号被读取为 %2C,而不是逗号。 HashMap 参数可能解决了这个问题。

关于java - 使用 Spring RestTemplate 发送返回数组的 get 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57261038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com