Spring 在控制器的每个动作中引导添加 if 语句

Spring Boot add if statement in every action in controller

我需要根据服务的某些条件重定向控制器中的每个操作。

示例:

@RestController
public class MyController{

    @Autowired
    private MyService myService;

    @GetMapping("/action1")
    public String action1() {
        if(myService.checkIfError()) {
            return "redirect:/error";
        } else {
            // specific code of action1
        }
    }

    @GetMapping("/action2")
    public String action2() {
        if(myService.checkIfError()) {
            return "redirect:/error";
        } else {
            // specific code of action2
        }
    }
}

在上面的代码中,action1action2都有一些特定的代码,但部分代码if(myService.checkIfError())return "redirect:/error";}对所有操作都是相同的。

有人可以告诉我如何删除此样板代码,以便保留特定于操作的代码吗?

您可以为此使用过滤器

@Component
public class YourFilter implements Filter {

    @Autowired
    private MyService myService;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {

        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;

        if (myService.checkIfError()) {
            httpServletResponse.sendRedirect("/error");
            return;
        }

        filterChain.doFilter(servletRequest, servletResponse);
    }
}

Spring 启动将自动装配此过滤器,并将拦截所有请求。