如何使用 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);
我不知道如何创建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);