Mam 3 serwery, serwerA, serwerB, serwerC, teraz wserwerC, niektóre żądania z serweraB są przetwarzane, a następnie nie wiem, jaki jest wynik (odpowiedź), jeśli to wynikA, chcę dać wynikA do serweraA jako żądanie, w przeciwnym razie podaj serwerB.
więc co mogę zrobić w kontrolerze serwera, czy coś jest nie tak w desgin.
Proszę, powiedz mi, co mam zrobić, dzięki.
To jest mój kod.
serwerA
@RestController
public class ControllerA {
@RequestMapping(value = "/methodA", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<String> methodA(@RequestBody String something) {
// some process
return null;
}
serverB
@RestController
public class ControllerB {
@RequestMapping(value = "/methodB", consumes =MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> methodB(@RequestBody String something) {
// some process
return null;
}
serverC
@RestController
public class ControllerC {
public ResponseEntity<String> methodC(@RequestBody String someReq) {
if (checkPam(someReq)) {
**// I want to call the ControllerA in serverA.**
}else {
**// I want to call the ControllerB in serverB.**
}
return null;
}
Odpowiedzi:
0 dla odpowiedzi № 1Możesz po prostu użyć narzędzia RestTemplate:
@RestController
public class ControllerC {
public ResponseEntity<String> methodC(@RequestBody String someReq) {
RestTemplate restTemplate = new RestTemplate();
if (checkPam(someReq)) {
String fooResourceUrl
= "http://path-to-server-a/path-to-service-a";
ResponseEntity<String> response
= restTemplate.getForEntity(fooResourceUrl , String.class);
}else {
String fooResourceUrl
= "http://path-to-server-b/path-to-service-b";
ResponseEntity<String> response
= restTemplate.getForEntity(fooResourceUrl , String.class);
}
return null;
}
Jak widzisz, tworzę obiekt RestTemplate za pomocą nowego operatora, możesz również zadeklarować komponent RestTemplate w swoim kontekście, a następnie zautomatyzować go w klasie kontrolera.