如何在Java适配器的响应中返回状态代码500?

时间:2018-08-08 08:57:57

标签: java http servlets ibm-mobilefirst httpresponse

该服务返回一些错误状态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出了点问题!

1 个答案:

答案 0 :(得分:0)

如此处所述:enter link description here,并在Servlet书中-Java™Servlet规范版本2.4的SRV.5.2节标题

正确的方法是:

      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();