Wpis z mikrobloga

#java #spring
Frontend przysyła mi zapytanie GET: /api?lon=344⪫=123
W konsoli dostaję log
request received in EarthQuakeService: lon/lat

Teraz chcę odpytać zewnętrzne API mają już otrzymane parametry

'@GetMapping(value="/api",params = {"lon","lat"})
String welcome(@RequestParam("lon") Integer lon, @RequestParam("lat") Integer lat) {//"name" use when not default
logger.info("request received in EService"+lon+"/"+lat);

return lon.toString()+"; "+lat.toString();

}'

Na razie to działa za pomocą podstawionego na sztywno Stringa
"https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&maxradiuskm=2000.0&latitude=30.21&longitude=12.9"

Jednak chciałbym sam "komponować" zapytanie na podstawie parametrów które dostanę z fronendu. Nie chcę klecić stringa.
  • 14
@marcinadd: otrzymałem z frontendu zapytanie api?lon=344⪫=123 którego parametry przechwyciłem i chciałbym odpytać (skonsumować) zewnętrzne api gdzie do adresu www dokleję moje parametry które właśnie przechwyciłem.
@borrow: ale on oczekuje query a nie params.

RestTemplate t = new RestTemplate();
final String urlX = "[https://earthquake.usgs.gov/fdsnws/event/1/query";](https://earthquake.usgs.gov/fdsnws/event/1/query";)
UriComponentsBuilder b = UriComponentsBuilder.fromUriString(urlX);
b.queryParam("format", "geojson");
b.queryParam("maxradiuskm", "2000.0");
b.queryParam("latitude","30.21");
b.queryParam("longitude","12.9");
System.out.println(t.getForEntity(b.build().toUri(), String.class));

To działa. Możesz dać inną klasę zamiast Stringa żeby zbudował dobrego JSONa.
@Karatte: Dzięki bardzo za opowiedź.

Jeszcze jest taka opcja która działa:

final String urlX = "[https://earthquake.usgs.gov/fdsnws/event/1/query?format=](https://earthquake.usgs.gov/fdsnws/event/1/query?format=){format}&maxradiuskm={maxradiuskm}&latitude={latitude}&longitude={longitude}";
fakeMap.put("format", "geojson");
fakeMap.put("maxradiuskm", "2000.0");
fakeMap.put("latitude", "20.0");
fakeMap.put("longitude", "30.0");

ResponseEntity responseEntity = restTemplate.getForEntity(urlX, DataModel.class, fakeMap);