我有一个Restlet ServerResource
,它应该使用参数user
处理GET请求。如果user
等于某个值,则应返回一些图像,否则发送错误响应(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
)发送标准化错误响应?
答案 0 :(得分:5)
查看ServerResource#setStatus(Status)
method JavaDoc以及其他重载方法。这允许您返回自定义正文以及所需的HTTP状态。
或者抛出new ResourceException
(class JavaDoc)框架会将这些转换为正确的HTTP状态并提供默认消息,尽管这不太可能是图像。
这应该符合您的需求。 JavaDoc链接到2015年11月25日版本2.3.x
答案 1 :(得分:4)
过去,我写过一篇关于此事的博文:
除了伟大的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(或其他)。
希望它可以帮到你, 亨利