2013-02-13 10 views
13

Wołam usługi REST, która zwraca XML, a przy użyciu Jaxb2Marshaller do organizowania moje zajęcia (np Foo, Bar, etc). Więc mój klient kod wygląda tak:Jak skonfigurować Wiosny RestTemplate powrotu NULL podczas stanu HTTP 404 jest zwracany

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); 

Gdy look-up po stronie serwera nie zwraca 404 wraz z niektórych XML. W rezultacie otrzymuję wyrzucony UnmarshalException, ponieważ nie może odczytać XML.

Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"exception"). Expected elements are <{}foo>,<{}bar> 

Ciało odpowiedź brzmi:

<exception> 
    <message>Could not find a Foo for ID 123</message> 
</exception> 

Jak mogę skonfigurować RestTemplate tak że RestTemplate.getForObject() Przywraca null jeśli 404 się dzieje?

+0

'getForObject' domyślnie powinny być rzucanie' HttpClientErrorException' z 404. Jak pan skonfigurowany 'RestTemplate'? –

+0

@SotiriosDelimanolis Nie mam już dostępu do kodu, ale domyślne zachowanie, które opisujesz, brzmi tak, jak oczekiwałem w tym czasie. (Powinienem nabrać nawyku mówienia o wersjach w przyszłych pytaniach.) – vegemite4me

Odpowiedz

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

Lepiej zrób 'if (ex.getStatusCode()! = HttpStatus.NOT_FOUND) { throw ex; } ' – vdimitrov

+0

Edytowane, dziękuję – Tim