2017-01-03 1 views
0

Ich bin REST-Dienste mit Spring-Mvc erstellen und was ich jetzt suche, ist eine Möglichkeit, Proxy-HTTP-Anfrage an externe REST-Service von Spring MVC-Controller.Der einfachste Weg, HttpServletRequest in Spring MVC-Controller

Ich bekomme HttpServletRequest Objekt und möchte es Proxy machen so wenige Änderungen wie möglich. Für mich ist es wichtig, alle Header und Attribute der eingehenden Anfrage so zu behalten, wie sie sind.

@RequestMapping('/gateway/**') 
def proxy(HttpServletRequest httpRequest) { 
    ... 
} 

Ich habe versucht, einfach einen anderen HTTP-Anforderung an externe Ressource zu senden RestTemplate verwenden, aber ich nicht einen Weg finden, kopieren REQUEST ATTRIBUTES (was in meinem Fall sehr wichtig ist).

Vielen Dank im Voraus!

+0

ich einen Proxy zu programmiert haben (ohne REST). Ich musste eine neue HTTP-Anfrage erstellen und an den "externen" Dienst senden. Ich habe [Apache HTTP Components] (http://hc.apache.org/) verwendet. Das ist nicht schwierig, aber es benötigt mehr als zwei oder drei Zeilen Code, um die HTTP-Anforderungsheader zu kopieren und die Anforderung zu erstellen. – JimHawkins

+0

Haben Sie versucht, Attribute auch zu kopieren? – Ghosty

+0

Ich musste die Anfrageparameter (Abfragezeichenfolge für HTTP GET oder Nachrichtentext für HTTP POST) und die Anforderungsheader kopieren. – JimHawkins

Antwort

-1

Wenn Sie an die Anwendung der API-Gateway-Muster für Microservices denken, werfen Sie einen Blick auf Netflix zuul, die eine gute Alternative im Frühjahr Schuh-Ökosystem ist. Ein gutes Beispiel ist here.

1

Sie können die Spring-Rest-Vorlage-Methode exchange verwenden, um die Anforderung an einen Drittanbieter-Service weiterzuleiten.

@RequestMapping("/proxy") 
@ResponseBody 
public String proxy(@RequestBody String body, HttpMethod method, HttpServletRequest request, HttpServletResponse response) throws URISyntaxException { 
    URI thirdPartyApi = new URI("http", null, "http://example.co", 8081, request.getRequestURI(), request.getQueryString(), null); 

    ResponseEntity<String> resp = 
     restTemplate.exchange(thirdPartyApi, method, new HttpEntity<String>(body), String.class); 

    return resp.getBody(); 
} 

What is the restTemplate.exchange() method for?

Verwandte Themen