基本上,我们有一个基于Spring Boot v1.2的大型整体应用程序,我们希望通过基于Spring Boot v2.1.6的MicroService(简称BR引擎)处理一些业务规则处理。
如何截获requestBody并将其首先发送到BR引擎,然后将其发送到实际的处理程序(Monolithic Controller),或者不基于BR引擎的结果-为简单起见,假设BR引擎返回true或错误。如果为true,则继续执行实际的处理程序;如果为false,则返回异常。
但是我想使用HandlerInterceptorAdapter,不确定如何截获requestBody并将其传递给微服务-然后从结果中将其继续进行或不传递给实际的处理程序。
作为一个例子,假设我有一个到Monolithic控制器的POST映射:
@PostMapping("/save")
public ResponseEntity<Client> save(@RequestBody ClientDTO dto) {
log.debug("Saving...");
Client newClient = Client.builder().build();
BeanUtils.copyProperties(dto, newClient);
return new ResponseEntity<>(clientService.save(newClient), HttpStatus.OK);
}
现在,我想拦截ClientDTO requestBody并将其首先发送到BR引擎,然后从那里进行一些处理。我已经考虑过使用拦截器并将其添加到实现WebMvcConfigurer的配置中。但是,我不确定如何在此处执行restTemplate并获得通过或失败的BR引擎的响应-如果失败,则将跳过实际的处理程序并仅引发异常
@Component
public class RuleEngineInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// intercept requestBody then send it to BR engine
// but how? and how can I get the response from BR engine
// to decide whether it will proceed to actual handler
// or not - probably return an exception.
return true;
}