【问题标题】:How do I return status code 500 in the Response from Java Adapter?如何在来自 Java 适配器的响应中返回状态代码 500?
【发布时间】:2019-01-15 11:25:00
【问题描述】:

服务返回一些错误状态 500,我想将它返回给客户端。 实际上,它被返回了,我可以在 HTTP 响应对象的客户端(webApp)中看到(状态,错误消息......), 但是第三次​​移动优先服务器(运行 JAVA Http 适配器的地方)必须重新声明。 通过成功响应(状态 200)不需要重新启动或执行任何操作,服务器运行稳定且正常。

这是我的代码:

    public void execute(HttpUriRequest req, HttpServletResponse resultResponse)
        throws IOException, IllegalStateException, SAXException {

    HttpResponse response = client.execute(req);

    if(response.getStatusLine().getStatusCode() != HttpStatus.SC_OK){
        resultResponse.sendError(response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase());
        //was tried but the same result
        //resultResponse.setStatus(response.getStatusLine().getStatusCode());
        //resultResponse.getWriter().close();
    }else{
        response.getEntity().writeTo(resultResponse.getOutputStream());
    }

}

也许这个组合不能一起工作,或者我的 resultResponse 出了点问题!

【问题讨论】:

  • 也许看看错误,请edit 回答您的问题?收到 500 错误几乎总是在某处弹出的异常
  • 这不是我的错误;作为客户,我不在乎,我必须转发从 Web 服务操作/端点收到的所有内容
  • 当您从后端收到状态码 500 时,服务器日志会告诉您什么?

标签: java http servlets ibm-mobilefirst httpresponse


【解决方案1】:

正如here 和 Servlet book - Section SRV.5.2 Headers of the Java™ Servlet Specification Version 2.4 中所解释的,正确的方法是:

ServletOutputStream os = resultResponse.getOutputStream();
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    response.getEntity().writeTo(resultResponse.getOutputStream());

} else {
    resultResponse.sendError(response.getStatusLine().getStatusCode(),
        response.getStatusLine().getReasonPhrase());
    response.getEntity().getContent().close();

    os.write(response.getStatusLine().getReasonPhrase().getBytes());
}
os.flush();
os.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多