如何在 Restlet 中发送错误响应?
How do I send an error response in Restlet?
我有一个 Restlet ServerResource
,它应该处理带有参数 user
的 GET 请求。如果 user
等于某个值,它应该 return 某个图像,否则发送错误响应(404 或 403),表明发送者不允许获取图像。
import org.restlet.data.MediaType;
import org.restlet.representation.ObjectRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
import org.restlet.resource.ServerResource;
public class GetMap extends ServerResource {
@Get
public Representation getImage() {
final String user = getQuery().getValues("user");
if (user.equals("me")) {
//Read map from file and return it
byte[] data = readImage();
final ObjectRepresentation<byte[]> or=new ObjectRepresentation<byte[]>(data, MediaType.IMAGE_PNG) {
@Override
public void write(OutputStream os) throws IOException {
super.write(os);
os.write(this.getObject());
}
};
return or;
}
return null; // Here I want to send an error response
}
[...]
}
如何在 getImage
方法(而不是 return null
)中发送标准化的错误响应?
查看 ServerResource#setStatus(Status)
method JavaDoc 和其他重载方法。这允许您 return 自定义正文以及所需的 HTTP 状态。
或者抛出 new ResourceException
(class JavaDoc) 框架会将它们转换为正确的 HTTP 状态并提供默认消息,尽管这不太可能是图像。
这应该可以满足您的需求。 JavaDoc 链接到版本 2.3.x 于 25/11/2015
以前我写过一篇博客post是关于这个的:
除了出色的 Caleryn 的回答之外,现在还有 @Status
注释可以在 Restlet 中使用自定义异常。样本:
@Status(value = 400, serialize = true)
public class MyValidationException extends RuntimeException {
public ServiceValidationException(String message, Exception e) {
super(message, e);
}
}
当抛出此类异常时,Restlet 会自动检测并创建相应的错误消息。在示例中,状态代码为 400
的响应,它尝试使用转换器服务将异常作为 bean 序列化为 JSON(或其他)。
希望对你有帮助,
蒂埃里
我有一个 Restlet ServerResource
,它应该处理带有参数 user
的 GET 请求。如果 user
等于某个值,它应该 return 某个图像,否则发送错误响应(404 或 403),表明发送者不允许获取图像。
import org.restlet.data.MediaType;
import org.restlet.representation.ObjectRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
import org.restlet.resource.ServerResource;
public class GetMap extends ServerResource {
@Get
public Representation getImage() {
final String user = getQuery().getValues("user");
if (user.equals("me")) {
//Read map from file and return it
byte[] data = readImage();
final ObjectRepresentation<byte[]> or=new ObjectRepresentation<byte[]>(data, MediaType.IMAGE_PNG) {
@Override
public void write(OutputStream os) throws IOException {
super.write(os);
os.write(this.getObject());
}
};
return or;
}
return null; // Here I want to send an error response
}
[...]
}
如何在 getImage
方法(而不是 return null
)中发送标准化的错误响应?
查看 ServerResource#setStatus(Status)
method JavaDoc 和其他重载方法。这允许您 return 自定义正文以及所需的 HTTP 状态。
或者抛出 new ResourceException
(class JavaDoc) 框架会将它们转换为正确的 HTTP 状态并提供默认消息,尽管这不太可能是图像。
这应该可以满足您的需求。 JavaDoc 链接到版本 2.3.x 于 25/11/2015
以前我写过一篇博客post是关于这个的:
除了出色的 Caleryn 的回答之外,现在还有 @Status
注释可以在 Restlet 中使用自定义异常。样本:
@Status(value = 400, serialize = true)
public class MyValidationException extends RuntimeException {
public ServiceValidationException(String message, Exception e) {
super(message, e);
}
}
当抛出此类异常时,Restlet 会自动检测并创建相应的错误消息。在示例中,状态代码为 400
的响应,它尝试使用转换器服务将异常作为 bean 序列化为 JSON(或其他)。
希望对你有帮助, 蒂埃里