3 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
為什么需要調(diào)用另一個(gè)端點(diǎn)?這些控制器是否位于單獨(dú)的應(yīng)用程序中?
如果不是,那么在這兩個(gè)控制器之上使用服務(wù)會更有效:
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 個(gè)不同的應(yīng)用程序,那么問題可能出在您的 CSRF 設(shè)置上。如果您在第二個(gè)應(yīng)用程序中啟用了 CSRF,那么它將拒絕您的呼叫,因?yàn)槟鷽]有使用 RestTemplate 傳遞 CSRF 令牌。
稍后編輯:
您可以使用外觀模式在控制器和服務(wù)之間添加另一層抽象:
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貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
您還可以將第二個(gè)控制器注入第一個(gè)控制器中,然后直接調(diào)用該方法。如果您不想動態(tài)更改端點(diǎn),則此方法有效。

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