该解决方案使用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注入到控制器方法中,则即使我不使用该特定对象并继续使用注入到处理程序中的对象,一切也会按预期进行。
我对这个框架还很陌生,我可以肯定这是由于我的了解有限,但是如果有人可以指出正确的方向并提供一些见解,我将不胜感激