使用HttpServletResponse.sendRedirect()时,间歇性/不工作重定向

时间:2019-05-21 03:45:27

标签: java spring rest spring-boot servlets

该解决方案使用Java和Spring rest API。当通过API调用执行我的API端点之一时,该请求将移交给处理程序。此时,我正在通过构造函数向HttpServletResponse对象中注入(@autowired)。

我正在努力理解为什么我遇到以下行为,其中的重定向并不总是有效。

此示例显示了失败的代码。

@Controller
public class ConnectController {

    private final IConnectHandler connectHandler;

    @Lazy
    @Autowired
    public ConnectController(IConnectHandler handler) {
        this.connectHandler = handler;
    }

    @GetMapping("/redirect")
    public String redirectHandler() {
        this.connectHandler.providerRedirect();
    }
}

@Service
public class ConnectHandler implements IConnectHandler {

    private final HttpServletResponse response;

    @Lazy
    @Autowired
    public ConnectController(HttpServletResponse response) {
        this.response = response;
    }

    @Override
    public String redirectHandler() {
        response.sendRedirect("http://somewhere.com");
    }
}

此示例显示了正常工作所需的最低要求

@Controller
public class ConnectController {

    private final IConnectHandler connectHandler;

    @Lazy
    @Autowired
    public ConnectController(IConnectHandler handler) {
        this.connectHandler = handler;
    }

// Now inject here and it all starts working
    @GetMapping("/redirect")
    public String redirectHandler(HttpServletResponse response) { 
        this.connectHandler.providerRedirect();
    }
}

@Service
public class ConnectHandler implements IConnectHandler {

    private final HttpServletResponse response;

    @Lazy
    @Autowired
    public ConnectController(HttpServletResponse response) {
        this.response = response;
    }

    @Override
    public String redirectHandler() {
        response.sendRedirect("http://somewhere.com");
    }
}

在我遇到这种奇怪行为的特定方法中,我正在使用sendRedirect方法执行重定向。

我的问题是,这似乎非常不可靠,并且在大多数情况下会返回找不到模板的错误。

但是,如果我将HttpServletResponse注入到控制器方法中,则即使我不使用该特定对象并继续使用注入到处理程序中的对象,一切也会按预期进行。

我对这个框架还很陌生,我可以肯定这是由于我的了解有限,但是如果有人可以指出正确的方向并提供一些见解,我将不胜感激

0 个答案:

没有答案