Czesc ,
ucze się javy i springa (głównie z tutoriali, czasem książka).
Chciałem napisać w ramach nauki serwis, który łączy się do zew. usługi i pobiera jakieś dane. Dla was pewno prosta sprawa, ale mi osobiscie ciężko znaleźć przykład, który w miare kompleksowo pokrywa temat (czyli również logowanie, obsługa błędów, w miare czysty kod itd).
Zatem byłbym wdzięczny za wskazanie głupot, ewentualnie jeśli jest ich zbyt dużo to pokazanie jakiegoś przykładu, żebym wiedział jak to przepisać.
moje założenia :
- miało być czytelnie
- chciałem poprawnie użyć httpclient od apache
- poprawnie obsłużyć błędy (zasadniczo chce przerwać działanie aplikacji i zalogować to co istotne)
kod poniżej
@Slf4j
public class ExternalCallService {
private final String exteranlServiceUrl;
public ExternalCallService(String exteranlServiceUrl) {
this.exteranlServiceUrl = exteranlServiceUrl;
}
ExternalServiceResult callForExternalData(){
HttpGet request = createRequest();
String response = executeRequest(request);
return ExternalServiceResult.of(response);
}
private HttpGet createRequest(){
HttpGet request = new HttpGet();
request.setURI(URI.create(exteranlServiceUrl));
return request;
}
private String executeRequest(HttpGet httpGet) {
try(CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(httpGet)){
int httpResponseCode = response.getStatusLine().getStatusCode();
String result = EntityUtils.toString(response.getEntity());
return handleResponse(httpResponseCode, result);
} catch (IOException e) {
log.error("Exception on sending request", e);
throw new RuntimeException(e);
}
}
private String handleResponse(int httpStatus, String result){
if(httpStatusOk(httpStatus)){
return result;
} else {
log.error("Server response : " + result + " : http code : " + httpStatus);
throw new RuntimeException("Error response from server");
}
}
}