如何使用 RestTemplate 使用 Spring Hateoas 格式化输出应用程序/json

问题描述

我目前正在开发 Spring 应用程序客户端,该客户端使用来自第三方 API 的以下应用程序/json 响应。

JSON:(我知道这是 Spring Hateoas 表示的形式,我将其作为响应标头作为“application/json 所以也想探索 Traverson,但由于它不是 hal+json 而无法工作”)

{
    "links": {
        "next": {
            "href": "/v1/names?page=1&size=2"
        },"self": {
            "href": "/v1/names"
        }
    },"data": [
        {
            "id": "5960c4ec","name": "1232323","data": {
                "dataid": "cdsc","dataname": "csdc","some": null
            },"references": [
                {
                    "id": "...."
                }
            ]
        },{
            "id": "34543535","data": {
                "dataid": "ncsdcs","dataname": "cdscsdc","references": [
                {
                    "id": "csdc"
                }
            ]
        }
    ]
}

Spring 数据类:

public class Data extends RepresentationModel<Data>{
    private String name;
    private String id;
..getter setter
}

Try1:responseEntity 不包含任何结果

HttpHeaders header = new HttpHeaders();
        header.add("Authorization","basic ...");
        HttpEntity<Data> httpEntity = new HttpEntity<>(header);
ResponseEntity<CollectionModel<EntityModel<Data>>> responseEntity = template.exchange(
                new URI(akb),HttpMethod.GET,httpEntity,new ParameterizedTypeReference<CollectionModel<EntityModel<Data>>>() {});

Try2:responseEntity 不包含任何结果

HttpHeaders header = new HttpHeaders();
        header.add("Authorization","basic ...");
        HttpEntity<Data> httpEntity = new HttpEntity<>(header);
ResponseEntity<CollectionModel<PagedModel<Data>>> responseEntity = template.exchange(
                new URI(akb),new ParameterizedTypeReference<CollectionModel<PagedModel<Data>>>() {});

Try3:responseEntity 不包含任何结果

HttpHeaders header = new HttpHeaders();
        header.add("Authorization","basic ...");
        HttpEntity<Data> httpEntity = new HttpEntity<>(header);
ResponseEntity<PagedModel<Data>> responseEntity = template.exchange(
                new URI(akb),new ParameterizedTypeReference<PagedModel<Data>>() {});

我仍然可以使用 Object 的 ResponseEntity 并迭代结果,但是使用 hal 形式的 json 的最简单和最好的方法是什么。

我的应用程序中也有 resttemplate 配置:

@Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
        mapper.registerModule(new Jackson2HalModule());

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON,MediaTypes.HAL_JSON,MediaType.ALL));
        converter.setObjectMapper(mapper);

        return builder.messageConverters(converter).build();
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)