更改 RequestDispatcher 中的 HTTP 方法
Changing HTTP method in RequestDispatcher
如何在 javax,servlet.RequestDispatcher
中更改 HTTP 方法?
我有一些支持 GET 和 POST 的旧服务 API,新版本支持删除以前通过 POST 发生的记录的 DELETE 方法。
我们通过为旧端点设置 RequestDispatcher.forward() 来停用旧版本 APIs(停止安排直到客户更改)。除了这个 POST 到 DELETE 映射之外,一切都很酷。
没有在新 API 中添加 POST 删除操作终点的任何解决方案?>
我认为您不能使用 servlet API 来做到这一点。您可以按照自己的意愿创建新请求,处理它的响应并通过原始响应(在 servlet 中)将其发回。
一些 http 客户端可能会帮助您。请参阅 Apache HTTP 客户端:
虽然我同意在您的 servlet 之后使用下一层是更好的选择,但这很有趣。包装传入请求以添加基于请求的功能(IE:身份验证状态等)是很常见的。 HttpServletRequestWrapper 用于完成此操作。如果您只需要更改方法,您可以执行以下操作:
class PostDeleteAdapter extends HttpServletRequestWrapper {
public String getMethod(){ return "POST"; }
}
如果您需要进一步调整请求,您还可以更改传入请求的其他方面。这可能与您的 servlet 容器 RequestDispatcher 配合得很好,但它完全取决于容器。
如何在 javax,servlet.RequestDispatcher
中更改 HTTP 方法?
我有一些支持 GET 和 POST 的旧服务 API,新版本支持删除以前通过 POST 发生的记录的 DELETE 方法。
我们通过为旧端点设置 RequestDispatcher.forward() 来停用旧版本 APIs(停止安排直到客户更改)。除了这个 POST 到 DELETE 映射之外,一切都很酷。
没有在新 API 中添加 POST 删除操作终点的任何解决方案?>
我认为您不能使用 servlet API 来做到这一点。您可以按照自己的意愿创建新请求,处理它的响应并通过原始响应(在 servlet 中)将其发回。
一些 http 客户端可能会帮助您。请参阅 Apache HTTP 客户端:
虽然我同意在您的 servlet 之后使用下一层是更好的选择,但这很有趣。包装传入请求以添加基于请求的功能(IE:身份验证状态等)是很常见的。 HttpServletRequestWrapper 用于完成此操作。如果您只需要更改方法,您可以执行以下操作:
class PostDeleteAdapter extends HttpServletRequestWrapper {
public String getMethod(){ return "POST"; }
}
如果您需要进一步调整请求,您还可以更改传入请求的其他方面。这可能与您的 servlet 容器 RequestDispatcher 配合得很好,但它完全取决于容器。