3 回答

TA貢獻1856條經驗 獲得超17個贊
為什么需要調用另一個端點?這些控制器是否位于單獨的應用程序中?
如果不是,那么在這兩個控制器之上使用服務會更有效:
public class Service {
public Object processController1(Object object) {
//some processing
return processController2(result of some processing);
}
public Object processController2(Object object) {
// processing
}
}
然后在你的控制器中使用這兩種方法:
public class Controller1{
private Service service;
public ReponseEntity<?> doWhatController1HasToDo(@RequestBody Object request){
return new ResponseEntity<>(service.processController1(request), OK);
}
}
public class Controller2{
private Service service;
public ReponseEntity<?> doWhatController1HasToDo(@RequestBody Object request){
return new ResponseEntity<>(service.processController2(resultProcess1), OK);
}
}
如果有 2 個不同的應用程序,那么問題可能出在您的 CSRF 設置上。如果您在第二個應用程序中啟用了 CSRF,那么它將拒絕您的呼叫,因為您沒有使用 RestTemplate 傳遞 CSRF 令牌。
稍后編輯:
您可以使用外觀模式在控制器和服務之間添加另一層抽象:
public class Facade{
private Service1 service1;
private Service2 service2;
public ReponseEntity<?> doWhatController1HasToDo(@RequestBody Object request){
Object resultService1 = service1.process(request);
Object resultService2 = service2.process(resultService1);
return new ResponseEntity<>(resultService2, OK);
}
public ReponseEntity<?> doWhatController2HasToDo(@RequestBody Object request){
Object resultService2 = service2.process(request);
return new ResponseEntity<>(resultService2, OK);
}
}

TA貢獻1829條經驗 獲得超4個贊
您的控制器使用@RestController進行注釋,這意味著從控制器方法返回的任何內容都將以 json 或 xml 的形式解釋。在您的情況下,如果您從Controller1 的doWhatController1HasToDo返回任何內容,它會將其處理為 json 或 xml。您應該通過以下方式做到這一點。它可能對你有幫助。
@Controller
public class Controller1{
@PostMapping("/endpoint1")
public String doWhatController1HasToDo(@RequestBody Object request){
//some processing
return "redirect:/doWhatController2HasToDo";
} }
我假設,您的兩個控制器都在同一個文件夾中(即 Controller1 和 Controller2)。這將調用 Controller2 的方法doWhatController2HasToDo(@RequestBody Object request),您可以對該方法執行任何操作,例如
@RestController
public class Controller2{
@PostMapping("/endpoint2")
public ReponseEntity<?> doWhatController2HasToDo(@RequestBody Object request){
//some processing
return new ResponseEntity<>(JSON, HttpStatus.OK);
}
}
添加回答
舉報