如何使用 Rest 模板创建包含变量的 URL?

How to create URL containing variables using Rest Template?

我不知道如何创建URL。我想通过表单从用户那里获取城市的价值。 AppID 和 app.myserviceWeatherUrl 我从 application.yml 获取。如何连接 URL 以获得如下内容:app.myserviceWeatherUrl?q=city&app.APPID ?

@Service
public class WeatherClient {

@Value("{app.APPID}")
private String appID;
@Value("{app.myserviceWeatherUrl}")
private String baseUrl;

private final RestTemplate restTemplate;


public WeatherClient(RestTemplate restTemplate) {
    this.restTemplate = restTemplate;
}

public WeatherDto getWeather(String city) {
    try {
        return restTemplate.getForObject(baseUrl + city + appID, WeatherDto.class);
    } catch (Exception e) {
        throw new DataNotAvailableException();
    }
  }
}

使用巧妙地命名为 URL 的 Java class。

你可以这样试试:

 import java.net.URI;
 import org.springframework.web.util.UriComponentsBuilder;


 URI uri = UriComponentsBuilder.fromUriString(baseUrl)
                .queryParam("city", city)
                .queryParam("appId", appId)
                .build().toUri();

因此,如果 baseUrl='/v1/api'city='Bern'appId='4' 它将是:

/v1/api?city=Bern&appId=4

然后将 uri 传递给 getForObject() 方法:

restTemplate.getForObject(uri, WeatherDto.class);