如何覆盖 Struts 2 REST 插件中的 XML 处理程序

发布于 2024-09-26 13:53:29 字数 383 浏览 1 评论 0原文

我正在开发一个使用 Struts 2 和 REST 插件的 Java Web 应用程序。按照约定,任何以“.xml”结尾的 URL 都将通过 XStreamHandler 发送。这很好——在大多数情况下这就是我想要的。

但在少数情况下,我希望将 XML回浏览器。我知道如何设置 @Result(type="stream") 注释并使其返回 InputStream。我已经对应用程序其他部分的图像执行了此操作。将 XML 作为流返回的问题是 REST 插件发现调用者正在请求 XML,因此它尝试反序列化 Action 类,而不是仅流式传输出我的 InputStream。

在这几种特殊情况下,我如何告诉 REST 插件不要通过 XStreamHandler 发送 XML 结果?

谢谢!

I am working on a Java web app that uses Struts 2 with the REST plugin. By convention, any URL that ends with ".xml" will be sent through the XStreamHandler. This is fine--it's what I want in most cases.

But in just a small number of cases I want to stream XML back to the browser. I know how to set up a @Result(type="stream") annotation and make it return an InputStream. I've done this for images in other parts of the app. The problem with returning XML as a stream is the REST plugin sees that the caller is requesting XML so it tries to deserialize the Action class instead of just streaming out my InputStream.

How can I tell the REST plugin, just in these few special cases, not to send an XML result through the XStreamHandler?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

智商已欠费 2024-10-03 13:53:29

哦,太好了,我找到了答案。秘密是返回实现 com.opensymphony.xwork2.Result 的类的实例。

假设“getFileName()”返回我想要流式传输的 XML 文件的名称:

@SkipValidation
public com.opensymphony.xwork2.Result streamFile() throws FileNotFoundException {
    return new StreamResult(new FileInputStream(new File(getFileName())));
}

Oh, cool, I figured out the answer. The secret is to return an instance of a class that implements com.opensymphony.xwork2.Result.

Assuming 'getFileName()' returns the name of the XML file I want to stream:

@SkipValidation
public com.opensymphony.xwork2.Result streamFile() throws FileNotFoundException {
    return new StreamResult(new FileInputStream(new File(getFileName())));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文