我有一個帶有 2 個控制器檔案的 springboot 專案,如下所示:
File1.java
@PostMapping("/test")
public String testMap(String s){
if(s!=null){
return "found it";
}
else {
// need to go to POST request in another controller
}
return "not found";
}
File2.java
@PostMapping("/test2")
public String testMap2(String s){
if(s!=null){
return "found it";
}
return "not found 2";
}
我曾嘗試添加 javaHttpURLConnection行以在 File1.java 中發送 POST 請求,但它不執行其中的操作testMap2,而是退出not found
您能否就我如何實作這一目標提出一些建議?
uj5u.com熱心網友回復:
您可以使用RestTemplate創建另一個 POST 請求,但我強烈建議避免這樣做。
由于這兩個控制器在同一個專案中,嘗試將公共邏輯提取到@Service應該注入兩個控制器的 a 中。
例如:
檔案1.java
@RestController
public class MyFirstController {
private MyBusinessLogic myBusinessLogic;
// Constructor injection
public MyFirstController(MyBusinessLogic myBusinessLogic) {
this.myBusinessLogic = myBusinessLogic;
}
@PostMapping("/test")
public String testMap(String s){
if(s!=null){
return "found it";
}
else {
return myBusinessLogic.doSomething(s);
}
return "not found";
}
}
檔案2.java:
@RestController
public class MySecondController {
private MyBusinessLogic myBusinessLogic;
// Constructor injection
public MySecondController(MyBusinessLogic myBusinessLogic) {
this.myBusinessLogic = myBusinessLogic;
}
@PostMapping("/test2")
public String testMap2(String s){
if(s!=null){
return myBusinessLogic.doSomething(s);
}
return "not found 2";
}
}
最后為通用邏輯創建一個服務:
@Service
public class MyBusinessLogic {
public String doSomething(String s) {
// common logic goes here
}
}
uj5u.com熱心網友回復:
您可以使用 RestTemplate。
假設我們的控制器看起來像這樣:
@RestController
@RequestMapping(value = "first/")
public class FirstRestController {
@PostMapping("test")
public String getTest(String s){
return service.doSomething(s);
}
}
基本上,將此方法作為 bean 添加到您的配置類之一中。@Bean 將方法放在應用程式背景關系中。現在我們可以在我們的服務中注入這個方法。
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
現在,我們在 Second App 中的一個服務方法,我們必須呼叫 First 的端點。
@Service
public class SecondAppService{
@Autowired
private RestTemplate restTemplate;
public String callFirst() {
final URI uri =UriComponentsBuilder.fromUriString(PATH "first/").toUri();
restTemplate.postForEntity(uri, "something", String.class);
// check your resttemplate docs, i used postForEntity here.
// if necessery return something with response, this method expects the return string but you get the idea.
}
}
這應該有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/351848.html
