【发布时间】:2019-05-20 14:04:47
【问题描述】:
我正在访问一个外部 api,我希望得到一个图像作为响应 (byte[])。我连接到此端点的方法如下所示:
private byte[] retrieveImage(String uri) {
byte[] imageBytes = null;
try {
URL url = new URL(uri);
BufferedImage bufferedImage = ImageIO.read(url);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
imageBytes = baos.toByteArray();
} catch (Exception ex) {
throw new ImageNotReadException(ex.getLocalizedMessage());
}
return imageBytes;
}
事实证明,如果我将错误的参数传递给目标端点,我会收到以下错误消息:
所以基本上我想throw 上面相同的错误,但我也想throw 和ImageNotReadException (java.lang.IllegalArgumentException: image == null!),以防程序无法读取图像 (byte[])。所以基本上,我的方法private byte[] retrieveImage(String uri) 将不得不抛出我的读取图像异常和端点响应异常。
有什么建议吗? 感谢您的帮助!
【问题讨论】:
-
如果你想抛出同样的异常,只需输入:throw ex;
-
我该怎么做?它是一个外部 api,如果一切正常,它会返回一个图像 (byte[]),如果有错误,它会返回 {"error": {"code":400, :"Invalid 'layersDefs'", "details":[] }}。不知道如何处理。
-
你的问题不清楚!你想在哪里处理响应?在您的 Java 代码中还是在浏览器中?
-
您正在“捕获”一个 HTTP 响应代码并想要抛出一个内部错误,或者向您的服务客户端返回相同的响应?再次,相当不清楚你想做什么。假设您想要解析非 200 响应代码并将它们传递——这通常不是最好的方法——你会这样做:从你的调用中获取响应到外部系统,检查它是否成功(2xx ),如果没有,请将其用作您自己的 Response 对象。完成。
-
如果您的客户可以灵活地更改返回类型,您可以轻松更改自定义对象类型的返回类型,其中包含状态码和 byte[] 作为属性(例如:Response),然后返回相关。或者您可以更改方法签名以抛出您自己的异常,并且您可以在外部 api 返回错误时显式抛出该异常。
标签: java spring rest spring-boot exception