无法在Restlet Web服务的http响应头中设置状态原因

时间:2015-05-29 08:56:45

标签: java web-services rest restlet-2.0

我正在使用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框架版本。 请帮忙。

1 个答案:

答案 0 :(得分:0)

我认为您无法更改预定义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;

}

希望它可以帮到你, 亨利