PagedResources<Resource 和 RestTemplate 不起作用
PagedResources<Resource and RestTemplate does not works
我正在使用 Spring Boot REST 示例。在此我使用 RestTemplate 来调用 returns PagedResources<Resource<EmployeeDto>>
对象的端点。但是通过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
}
}
我通过查看 http://izeye.blogspot.com/2015/01/consume-spring-data-rest-hateoas-hal.html and Why 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));
}
}
我正在使用 Spring Boot REST 示例。在此我使用 RestTemplate 来调用 returns PagedResources<Resource<EmployeeDto>>
对象的端点。但是通过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
}
}
我通过查看 http://izeye.blogspot.com/2015/01/consume-spring-data-rest-hateoas-hal.html and Why 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));
}
}