RESTサービスを呼び出し、_Jaxb2Marshaller
_を使用してクラス(例:Foo
、Bar
など)をマーシャリングします)。私のクライアントコードは次のようになります:
_ HashMap<String, String> vars = new HashMap<String, String>();
vars.put("id", "123");
String url = "http://example.com/foo/{id}";
Foo foo = restTemplate.getForObject(url, Foo.class, vars);
_
サーバー側のルックアップが失敗すると、XMLとともに404を返します。 XMLを読み取ることができないため、UnmarshalException
がスローされます。
_Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"exception"). Expected elements are <{}foo>,<{}bar>
_
応答の本文は次のとおりです。
_<exception>
<message>Could not find a Foo for ID 123</message>
</exception>
_
404が発生した場合にRestTemplate.getForObject()
がRestTemplate
を返すようにnull
を構成するにはどうすればよいですか?
Foo foo = null;
try {
foo = restTemplate.getForObject(url, Foo.class, vars);
} catch (HttpClientErrorException ex) {
if (ex.getStatusCode() != HttpStatus.NOT_FOUND) {
throw ex;
}
}
サーバー関連のエラーをキャプチャするために、これは内部サーバーエラーを処理します。
}catch (HttpServerErrorException e) {
log.error("server error: "+e.getResponseBodyAsString());
ObjectMapper mapper = new ObjectMapper();
EventAPIResponse eh = mapper.readValue(e.getResponseBodyAsString(), EventAPIResponse.class);
log.info("EventAPIResponse toString "+eh.toString());