Как настроить Spring RestTemplate для возврата null при возврате статуса HTTP 404

Я вызываю службу REST, которая возвращает XML, и используя 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);

При сбое поиска на стороне сервера он возвращает 404 вместе с некоторым XML. В итоге я получаю UnmarshalException, который не может прочитать XML.

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>

Как настроить RestTemplate так, чтобы RestTemplate.getForObject() возвращал null, если происходит 404?

Ответ 1

Foo foo = null;
try {
    foo = restTemplate.getForObject(url, Foo.class, vars);
} catch (HttpClientErrorException ex)   {
    if (ex.getStatusCode() != HttpStatus.NOT_FOUND) {
        throw ex;
    }
}