第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

使用對象作為參數(shù)從另一個(gè)控制器調(diào)用控制器并檢索響應(yīng)

使用對象作為參數(shù)從另一個(gè)控制器調(diào)用控制器并檢索響應(yīng)

隔江千里 2023-06-21 13:33:20
我有兩個(gè)休息控制器。兩者都是后映射端點(diǎn)。在第一個(gè)控制器 (Controller1) 使我需要的所有東西都成為一個(gè)對象之后,我想調(diào)用/重定向第二個(gè)控制器以便繼續(xù),然后從它那里得到響應(yīng)。@RestControllerpublic class Controller1{    @PostMapping("/endpoint1")    public ReponseEntity<?> doWhatController1HasToDo(@RequestBody Object request){       //some processing       //here i would like to call second controller    }}@RestControllerpublic class Controller2{    @PostMapping("/endpoint2")    public ReponseEntity<?> doWhatController2HasToDo(@RequestBody Object request){       //some processing       return new ResponseEntity<>(JSON, HttpStatus.OK);    }}我嘗試過使用 RestTemplate,但總是出現(xiàn) 405 錯(cuò)誤。我在某處讀過,這是因?yàn)槎嗖糠謕rivate ResponseEntity forwardUsingRestTemplate(HttpServletRequest httpServletRequest, Object object) throws MalformedURLException {        HttpHeaders headers = new HttpHeaders();        headers.setContentType(MediaType.APPLICATION_JSON);        HttpEntity req = new HttpEntity(object, headers);        RestTemplate template = new RestTemplate();        ResponseEntity<TdmResponse> response = template.exchange(getBaseUrl(httpServletRequest) + "/endpoint2", HttpMethod.POST, req, TdmResponse.class);}問題是,我如何調(diào)用第二個(gè)端點(diǎn)?
查看完整描述

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);

    }

}


查看完整回答
反對 回復(fù) 2023-06-21
?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

您還可以將第二個(gè)控制器注入第一個(gè)控制器中,然后直接調(diào)用該方法。如果您不想動態(tài)更改端點(diǎn),則此方法有效。



查看完整回答
反對 回復(fù) 2023-06-21
?
浮云間

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);

}

}


查看完整回答
反對 回復(fù) 2023-06-21
  • 3 回答
  • 0 關(guān)注
  • 177 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號