Hi,
ich habe eine Anwendung, die auf viele verschieden Systeme per REST zugreift. Und da gibt es dann viele mögliche Kombinationen:
Jetzt habe ich eine Klasse gebaut, die eine Methode für POST hat und eine für GET und eben entsprechende Parameter beim Aufruf.
Jetzt habe ich aber die nächste Anwendung dabei und brauche jetzt auch noch DELETE. Jetzt bin ich am überlegen, ob man dafür nicht eine generelle Methode bauen kann und GET/POST/DELETE als Parameter übergibt.
Das hat auch erstmal bis hier ganz gut geklappt:
Mein Problem ist in Zeile 37, wenn ich beim Post einen Body übergeben muss.
Das ganze System hier oben ist mit java.net gebaut, vorher war es Apache HTTP Client 5 und da hatte ich als POST-Body eine StringEntity.
Wäre schön, wenn die generelle Lösung auch Apache HTTP Client sein könnte, aber alles, was ich finde ist dann immer dieses "statische"
Ich suche noch eine Überklasse, oder ein Interface, in dem ich das HttpGet oder HttpPost unterbringen kann.
ich habe eine Anwendung, die auf viele verschieden Systeme per REST zugreift. Und da gibt es dann viele mögliche Kombinationen:
- Login mit erhalt von Token und das dann im Header für alle Folgeaufrufe
- Logindaten immer als Base64 in jedem Aufruf
- POST oder GET
Jetzt habe ich eine Klasse gebaut, die eine Methode für POST hat und eine für GET und eben entsprechende Parameter beim Aufruf.
Jetzt habe ich aber die nächste Anwendung dabei und brauche jetzt auch noch DELETE. Jetzt bin ich am überlegen, ob man dafür nicht eine generelle Methode bauen kann und GET/POST/DELETE als Parameter übergibt.
Das hat auch erstmal bis hier ganz gut geklappt:
Java:
public JSONObject executeHttpRequest(String url, boolean isAddition, boolean withAuthHeader, RequestType type) {
HttpClientContext context = null;
URI uri = null;
try {
if(isAddition) {
uri = new URI(BASE_URL + url);
context = buildDefaultContext();
} else {
uri = new URI(url);
context = buildCustomContext(url);
}
Builder requestBuilder = HttpRequest.newBuilder();
requestBuilder.uri(uri);
requestBuilder.header(HttpHeaders.ACCEPT, "application/json");
for (String key : headers.keySet()) {
requestBuilder.header(key, headers.get(key));
}
if(withAuthHeader) {
String authHeader = getAuth();
requestBuilder.header(HttpHeaders.AUTHORIZATION, authHeader);
}
switch(type) {
case DELETE:
requestBuilder.DELETE();
break;
case GET:
requestBuilder.GET();
break;
case POST:
requestBuilder.POST(HttpRequest.BodyPublishers.of);
break;
}
HttpRequest request = requestBuilder.build();
} catch (SSLException e) {
LOG.error("SSL Fehler beim Aufruf " + REFERENCESYSTEM.displayName());
result = "ERROR SSL Fehler beim Aufruf";
} catch (IOException e) {
if(REFERENCESYSTEM == ReferenceSystem.FII) {
LOG.info(e.getMessage());
}
LOG.error("Fehler beim HTTPGet für " + REFERENCESYSTEM.displayName() + " ", e);
result = "ERROR " + e.getMessage();
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
Das ganze System hier oben ist mit java.net gebaut, vorher war es Apache HTTP Client 5 und da hatte ich als POST-Body eine StringEntity.
Wäre schön, wenn die generelle Lösung auch Apache HTTP Client sein könnte, aber alles, was ich finde ist dann immer dieses "statische"
Java:
HttpGet httpget = new HttpGet(url);
//oder
HttpPost request = new HttpPost(url);
Ich suche noch eine Überklasse, oder ein Interface, in dem ich das HttpGet oder HttpPost unterbringen kann.