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);
}
}
添加回答
举报