![](/img/trans.png)
[英]Java Google AutoML NLP client waiting forever for response (no exception thrown)
[英]Java: What REST Response does the client recieve when an exception is thrown and an ExceptionMapper is used?
我試圖了解ExceptionMapper的工作方式。
假設我定義了一個REST服務,該服務返回XYZResponse擴展BaseResponse。 另外,我定義了一個ExceptionMapper,該異常返回擴展了BaseResponse的FailureResponse。
如果發生異常,客戶端將收到什么響應?
客戶端是否應該能夠始終獲得XYZResponse,因為這是在REST方法的簽名中定義的? 如果發生異常,客戶端會改為接收FailureResponse嗎? 因此,客戶端只能依靠始終接收BaseResponse嗎?
更新
我測試了:
@Test
public void figureOutResponse()
{
BaseResponse response = null;
try
{
response = occurrenceExportResourceUT
.getStatus(UUID.randomUUID(),4);
}catch (Exception e)
{
System.out.println("Response: " + response);
System.out.println("Message: " + e.getMessage());
}
}
結果:
Response: null
Message: HTTP 404 Not Found
因此,似乎從未收到FailureResponse。 那么,ResponseResponse有什么用? 應該收到嗎? 結果是否表示ExceptionWrapper設置不正確?
如果您使用異常映射器捕獲到異常,則可能需要設置合適的http狀態代碼以指示出現問題。 然后,您可以實施客戶端以檢查http狀態代碼並解析相應的響應。 (基本上,您與“ http”狀態代碼為xxx的“合同”將返回ResponseX,而對於HTTP狀態代碼為yyy的您將返回ResponseY)
我發現異常(javax.ws.rs.NotFoundException)具有方法.getResponse()。
@Test
public void goFigure()
{
NotFoundException thrown = assertThrows(NotFoundException.class, () -> {
occurrenceExportResourceUT.getStatus(UUID.randomUUID(), 4);
}, "Expected getStatus to throw, but it didn't");
ByteArrayInputStream arrayInputStream = (ByteArrayInputStream) thrown
.getResponse().getEntity();
Scanner scanner = new Scanner(arrayInputStream);
scanner.useDelimiter("\\Z");
String data = "";
if (scanner.hasNext())
data = scanner.next();
System.out.println(data);
}
輸出包含FailureResponse:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><failureResponse><metaData><creationTime>0</creationTime></metaData><cause>Export job with id 1dd95fe6-46cc-4e02-b76e-2d1b621e7f82 not found</cause></failureResponse>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.