【问题标题】:PagedResources<Resource and RestTemplate does not worksPagedResources<Resource 和 RestTemplate 不起作用
【发布时间】:2020-03-25 01:22:47
【问题描述】:

我正在使用 Spring Boot REST 示例。在此,我使用 RestTemplate 调用返回 PagedResources&lt;Resource&lt;EmployeeDto&gt;&gt; Object 的端点。但是当通过RestTemplate调用时,我没有得到任何内容。但是,此服务构建在另一个微服务中,可以通过 Web 轻松访问,并且可以通过 Postman 调用。

@GetMapping("/{employeeId}/employees")
public PagedResources<Resource<EmployeeDto>> getEmployyes(@PathVariable(name="employeeId") String employeeId, 
        @RequestParam(defaultValue="0",required = false, name="page") Integer page, 
        @RequestParam(defaultValue="25",required = false, name = "size") Integer size,
        @RequestParam(defaultValue="billingNumber") String sortParam,
        @RequestParam(defaultValue="ASC",required = false) Direction direction,
        Pageable pageable, HttpServletRequest request) throws IOException{

    return employeeService.getEmployeesByCid(employeeId, request);
}

我使用下面的代码,它没有给我任何内容。

String uri = "http://localhost:8080/employee-api/employees/160166/employees?page=0&size=25";

RestTemplate template = new RestTemplate();
ResponseEntity<PagedResources<Resource<EmployeeDto>>> studentResponse = template
        .exchange(uri, HttpMethod.GET, null, new TypeReferences.PagedResourcesType<Resource<EmployeeDto>>(){});
System.out.println(studentResponse.getBody());

如果我在下面使用,那么我会得到响应。

final ResponseEntity<String> studentResponse = template
                .exchange(URL, HttpMethod.GET, null, String.class);

注意:如果我通过 Postman 执行代码,我会得到以下响应。

{
  "_embedded": {
    "employeeDto": [
      {
        "employeeNumber": "3109194",
        "status": "A"
      },
      {
        "employeeNumber": "3109224",
        "status": "A"
      },
      {
        "employeeNumber": "3109514",
        "status": "A"
      },
      {
        "employeeNumber": "3109519",
        "status": "A"
      }
    ]
  },
  "_links": {
    "first": {
      "href": "http://localhost:8080/customers/1/employee-numbers?sortParam=employeeNumber&page=0&size=4&sort=employeeNumber,asc"
    },
    "prev": {
      "href": "http://localhost:8080/customers/1/employee-numbers?sortParam=employeeNumber&page=0&size=4&sort=employeeNumber,asc"
    },
    "self": {
      "href": "http://localhost:8080/customers/1/employee-numbers?sortParam=employeeNumber&page=1&size=4&sort=employeeNumber,asc"
    },
    "next": {
      "href": "http://localhost:8080/customers/1/employee-numbers?sortParam=employeeNumber&page=2&size=4&sort=employeeNumber,asc"
    },
    "last": {
      "href": "http://localhost:8080/customers/1/employee-numbers?sortParam=employeeNumber&page=3&size=4&sort=employeeNumber,asc"
    }
  },
  "page": {
    "size": 4,
    "totalElements": 14,
    "totalPages": 4,
    "number": 1
  }
}

【问题讨论】:

    标签: java spring-boot resttemplate pageable


    【解决方案1】:

    我通过查看http://izeye.blogspot.com/2015/01/consume-spring-data-rest-hateoas-hal.htmlWhy does RestTemplate not bind response representation to PagedResources? 解决了这个问题。

    但是,这是我开发的代码,效果很好。

    public class Demo {
        private static RestTemplate restTemplate() {
            ObjectMapper mapper = new ObjectMapper();
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            mapper.registerModule(new Jackson2HalModule());
    
            MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
            converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
            converter.setObjectMapper(mapper);
    
            return new RestTemplate(Collections.<HttpMessageConverter<?>> singletonList(converter));
        }
    
        public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
            String URL = "http://localhost:8080/employee-api/employees/160166/employees?page=0&size=25";
    
            RestTemplate restTemplate = restTemplate();
    
            ResponseEntity<PagedResources<Resource<EmployeeDto>>> result = restTemplate.exchange(URL, HttpMethod.GET,
                    null/* httpEntity */, new ParameterizedTypeReference<PagedResources<Resource<EmployeeDto>>>() {});
            PagedResources<Resource<EmployeeDto>> body = result.getBody();
            ObjectMapper mapper = new ObjectMapper();
            String writeValueAsString = mapper.writeValueAsString(body);
    
            System.out.println(mapper.writeValueAsString(body));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      相关资源
      最近更新 更多