Spring - 通过异常处理程序拦截来自另一个 bean 的响应

我有两个@RestControllers -(A 和 B)并注册了ResponseEntityExceptionHandler. 是否有可能(以及如何做到)在应用异常处理程序后调用A并获得响应B

例子:

  1. 用户休息电话 A

  2. A电话BgetPerson

  3. B 抛出异常 NotFound

  4. NotFound由异常处理程序处理,转换ResponseEntity并放置 400 状态

  5. B 最后返回异常 ResponseEntity

  6. A 获得 400 状态 B

  7. A 可以得到这个 400 并用它做点什么

简单@Autowired是行不通的。

片段:

A:

@RestController

@RequestMapping("/v1")

public class A {


    private final B b;


    @Autowired

    public A(B b) {

        this.b = b;

    }


    @PostMapping(

        value = "persons",

        consumes = "application/json",

        produces = "application/json")

    public ResponseEntity<List<StatusResponse<Person>>> addPersons(final List<Person> persons) {

        final List<StatusResponse<Person>> multiResponse = new ArrayList<>();

        for(final Person p: persons) {

            final ResponseEntity<Person> response = b.addPerson(person);

            multiResponse.add(new StatusResponse<>(

                response.getStatusCode(), response.getMessage(), response.getBody()

            ));

        }

        return ResponseEntity.status(HttpStatus.MULTI_STATUS).body(multiResponse);

    }


}

乙:


@RestController

@RequestMapping("/v1")

public class B {


    @PostMapping(

        value = "person",

        consumes = "application/json",

        produces = "application/json")

    public ResponseEntity<Person> addPerson(final Person person) {

        accessService.checkAccess();

        return ResponseEntity.status(201).body(

            logicService.addPerson(person)

        );

    }


}

处理程序


@ControllerAdvice

public final class MyExceptionHandler extends ResponseEntityExceptionHandler {


    @ExceptionHandler(MyException.class)

    protected ResponseEntity<Object> handleApiException(final MyException exception, final WebRequest webRequest) {

        //logic

        return afterLogic;

    }


}


翻翻过去那场雪
浏览 146回答 2
2回答

万千封印

forward 就像重定向,但完全发生在服务器端;Servlet 容器将相同的请求转发到目标 URL;URL 在浏览器中不会改变。在春天你可以这样做,你可以传递属性:@Controller@RequestMapping("/")public class YourController {&nbsp; &nbsp; @GetMapping("/forward")&nbsp; &nbsp; public ModelAndView redirectWithUsingForwardPrefix(ModelMap model) {&nbsp; &nbsp; &nbsp; &nbsp; model.addAttribute("attribute", "forward");&nbsp; &nbsp; &nbsp; &nbsp; return new ModelAndView("forward:/redirectedUrl", model);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java