【问题标题】:Unable to set status reason in http response header in Restlet Web service无法在 Restlet Web 服务的 http 响应标头中设置状态原因
【发布时间】:2015-05-29 08:56:45
【问题描述】:

我正在使用 restlet 框架制作一个 REST Web 服务。我正在使用 org.restlet 2.3.1 jar

我必须自定义错误响应标头。根据具体问题,我必须在响应标头中显示响应状态代码和状态原因。 为此,我创建了一个扩展 StatusService 并覆盖 toStatus 方法的类。我检查 throwable 并相应地设置状态。请参阅下面的示例代码。

@Override
public Status toStatus(Throwable throwable, Request request,
        Response response) {
    if (throwable != null) {
        return new Status(500,throwable, "DD","DD");
    }

    return super.toStatus(throwable, request, response);
}

因此,无论何时从 restlet 代码中抛出异常,都会在此处捕获并返回错误响应。错误响应具有正确的状态代码 500,但状态原因不正确。它显示的是内部服务器错误,而不是 DD。

HTTP/1.1 500 内部服务器错误

是否有一些但我正在使用的 restlet 框架版本。 请帮忙。

【问题讨论】:

    标签: java web-services rest restlet-2.0


    【解决方案1】:

    我认为您无法更改预定义 HTTP 状态代码的原因短语。它们是由 HTTP 规范本身定义的......

    如果你想为客户端提供额外的提示,你应该使用响应负载并覆盖状态服务的方法toRepresentation

    以下链接提供了有关如何执行此操作的更多详细信息:https://templth.wordpress.com/2015/02/27/exception-handling-with-restlet/

    已编辑

    根据要求,您还可以在自定义响应标头中发送有关错误消息的一些提示,如下所述:

    @Override
    public Status toStatus(Throwable throwable, Resource resource) {
        Status status = Status.SERVER_ERROR_INTERNAL;
    
        Response response = resource.getResponse();
    
        Series<Header> responseHeaders = response.getHeaders();
        responseHeaders.add(new Header(
                     "Some-Header", "my custom message"));
    
        return status;
    
    }
    

    希望对你有帮助, 蒂埃里

    【讨论】:

    • 是否可以在任何其他 http 响应标头中发送错误消息。我知道通过覆盖 toRepresentation 可以将错误消息作为响应正文发送。但我不想在 http 响应正文中显示错误消息。我想在 http 标头中发送错误消息。
    • 我对蒂埃里的回答有一些小问题。您只需调用“resource.getReponse()”方法即可访问响应。然后,您只需调用“Response#getHeaders()”方法即可访问标题。此外,我想说原因短语的生成似乎是由底层 HTTP 连接器处理的。内部连接器(基于 JDK 的 HttpServer 类)显示“Internal Server Error”,Jetty 生成“Server Error”响应短语。
    • 我根据 Thierry 的 cmets 更新了我的答案!
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2014-01-27
    • 2011-01-23
    • 2015-11-07
    • 1970-01-01
    • 2019-07-22
    • 2016-08-27
    • 2021-05-26
    相关资源
    最近更新 更多