Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么RestTemplate会从HAL+;JSON响应?_Json_Spring_Spring Data Rest_Spring Hateoas_Spring Web - Fatal编程技术网

为什么RestTemplate会从HAL+;JSON响应?

为什么RestTemplate会从HAL+;JSON响应?,json,spring,spring-data-rest,spring-hateoas,spring-web,Json,Spring,Spring Data Rest,Spring Hateoas,Spring Web,我使用RestTemplate测试通过SpringDataREST公开的API,在解析响应时无法获得链接。rest模板配置有Jackson2HalModule支持的HttpConverter,请求的实体具有指向JSON响应中显示的关联的链接 这里是JSON { "name" : "Hero @ Bangalore", "venue" : { "name" : "Wayne Manor", "address" : "1 MG Road", "city" : "Ban

我使用RestTemplate测试通过SpringDataREST公开的API,在解析响应时无法获得链接。rest模板配置有Jackson2HalModule支持的HttpConverter,请求的实体具有指向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配置为,因为我们得到的是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);

给出一个
NullPointerException

您没有向
RestTemplate
注册
halConverter
,因为您只是查找现有的,并将它们加上
halConverter
添加到一个任意列表中,该列表再也不会进入
RestTemplate

以及
workshopResource.getBody().getLink(“场地”)
并更改为
workshopResource.getBody().getLink(“场地”).getHref().equals(…)
修复了测试
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()));