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

Java 无法在Restlet Web服务的http响应标头中设置状态原因,java,web-services,rest,restlet-2.0,Java,Web Services,Rest,Restlet 2.0,我正在使用restlet框架制作一个RESTWeb服务。我正在使用org.restlet2.3.1jar 我必须自定义错误响应标题。根据具体问题,我必须在响应标题中显示响应状态代码和状态原因。 为此,我创建了一个扩展StatusService并重写toStatus方法的类。我检查可丢弃项并相应地设置状态。请参阅下面的示例代码 @Override public Status toStatus(Throwable throwable, Request request, Respons

我正在使用restlet框架制作一个RESTWeb服务。我正在使用org.restlet2.3.1jar

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

@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.1500内部服务器错误

我正在使用的restlet框架版本中有一些例外。
请帮助。

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

如果要向客户端提供其他提示,应使用响应负载并覆盖状态服务的方法
toRepresentation

以下链接提供了有关如何执行此操作的更多详细信息:

已编辑

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

@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;

}
@覆盖
公共状态toStatus(可丢弃、可丢弃、资源){
Status Status=Status.SERVER\u ERROR\u INTERNAL;
Response=resource.getResponse();
Series responseHeaders=response.getHeaders();
响应标题。添加(新标题)(
“某些标题”、“我的自定义消息”);
返回状态;
}
希望它能帮助你,
Thierry

是否可以在任何其他http响应头中发送错误消息。我知道可以通过覆盖toRepresentation将错误消息作为响应体发送。但是我不想在http响应正文中显示错误消息。我想在http头中发送错误消息。我对Thierry的回答有一些小评论。您只需调用“resource.getReponse()”方法即可访问响应。然后,只需调用“Response#getHeaders()”方法就可以访问这些头。此外,我想说原因短语的生成似乎是由底层HTTP连接器处理的。内部连接器(基于JDK的HttpServer类)显示“内部服务器错误”,Jetty生成“服务器错误”响应短语。我根据Thierry的评论更新了我的答案!