gpt4 book ai didi

java - 从请求中读取时防止 IllegalStateException

转载 作者:行者123 更新时间:2023-11-30 07:38:38 25 4
gpt4 key购买 nike

我有一个拦截器用于捕获异常并发送有关此异常的电子邮件。

我所有的 struts 操作都扩展了实现 SerlvetRequestAware 的 CoreController。

在邮件服务类中,我有:

CoreController cc = (CoreController)invocation.getAction();
HttpServletRequest request = cc.getRequest();

我想将请求正文插入电子邮件(如果存在)。像这样:

StringWriter msg = new StringWriter();
msg.write("Requested URI: " + request.getRequestURI()+NEW_LINE);
msg.write("Requested Query String: " + request.getQueryString()+NEW_LINE);
msg.write("Request method: "+request.getMethod()+NEW_LINE);
try {
if (request.getReader() != null) {
msg.write("Request body: "+ request.getReader().readLine()+NEW_LINE);
request.getReader().close();
}
} catch (IOException e) {
e.printStrackTrace();
} catch(IllegalStateException e) {
e.printStrackTrace();
}

现在,当 reader 不为空时,它总是抛出 IllegalStateException。我如何“还原”阅读器或如何以任何其他方式阅读请求正文?

编辑异常:已经为此请求调用了 getInputStream()

最佳答案

如果您收到 IllegalStateException,也许您应该尝试使用请求的 InputStream 而不是它的 Reader:

BufferedReader bufferedReader;
try {
bufferedReader = request.getReader();
} catch (IllegalStateException e) {
InputStream inputStream = request.getInputStream();

// As per BalusC's comment:
String charsetName = request.getCharacterEncoding();
if (charsetName == null) {
charsetName = "UTF-8";
}

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charsetName);
bufferedReader = new BufferedReader(inputStreamReader);
}

bufferedReader.readLine();

关于java - 从请求中读取时防止 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1674432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com