2015-08-10 13 views
0

Я использую RestTemplate для тестирования API, открытых через Spring DATA REST, и я не могу получить ссылки при анализе ответа. Шаблон останова настроен с поддержкой HttpConverter от Jackson2HalModule, а запрошенный Entity имеет ссылки на ассоциации, которые появляются в ответе JSON в порядке.Почему RestTemplate отменяет ссылки с ответа HAL + JSON?

Вот JSON

{ 
    "name" : "Hero @ Bangalore", 
    "venue" : { 
    "name" : "Wayne Manor", 
    "address" : "1 MG Road", 
    "city" : "Bangalore", 
    "state" : "Karnataka", 
    "pincode" : "560001" 
    }, 
    "seatsAvailable" : 40, 
    "workshopType" : "Batman Challengers", 
    "date" : "2015-09-10", 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/workshops/1{?projection}", 
     "templated" : true 
    }, 
    "venue" : { 
     "href" : "http://localhost:8080/workshops/1/venue" 
    } 
    } 
} 

В RestTemplate настроен как adviced in this post, так как мы получаем ответ HAL + JSON

ObjectMapper objectMapper = new ObjectMapper(); 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
objectMapper.registerModule(new Jackson2HalModule()); 
MappingJackson2HttpMessageConverter halConverter = new MappingJackson2HttpMessageConverter(); 
halConverter.setSupportedMediaTypes(Arrays.asList(MediaTypes.HAL_JSON)); 
halConverter.setObjectMapper(objectMapper); 

restTemplate = new RestTemplate(); 
List<HttpMessageConverter<?>> existingConverters = restTemplate.getMessageConverters(); 
List<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<>(); 
httpMessageConverters.add(halMessageConverter); 
httpMessageConverters.addAll(existingConverters); 

Теперь, я надеюсь, ссылки будут доступны в анализируемом объекте ответа также, но это не так, вот как я получаю ответ

ResponseEntity<Resource<Workshop>> workshopResource = 
restTemplate 
     .exchange(DEFAULT_PROJECTION, HttpMethod.GET, null, 
      new ParameterizedTypeReference<Resource<Workshop>>() { 
      }); 

Workshop responseBody = workshopResource.getBody().getContent(); 

но утверждение для места проведения ссылки не удается

assertTrue(workshopResource.getBody().getLink("venue").equals(paulURI.toString())); 

дает NullPointerException

ответ

1

Вы не регистрируете halConverter с RestTemplate, как вы только глядя существующими и добавить те, плюс halConverter к произвольный список, который никогда не превращает его в RestTemplate.

+0

это и 'workshopResource.getBody(). GetLink (" место ")' и изменить на 'workshopResource.getBody(). GetLink (« место »). GetHref(). Equals (...)' исправлено тестирование –

Смежные вопросы