我需要使用www.example.com将get请求从spring应用程序发送到另一个spring应用程序resttamplate.exchange,如果我发送这样的请求:
public Page<DenominationLogActivityResponseDto> getLogActivities(String token, Integer page,
Integer limit, String sortBy, String order) {
HttpHeaders headers = addTokenHeader(token);
HttpEntity<String> httpEntity = new HttpEntity<>(null, headers);
UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(
masterUrl + "/denomination/log?page={page}&limit={limit}&order={order}&sortBy{sortBy}")
.queryParam("page", page)
.queryParam("limit", limit)
.queryParam("order", order)
.queryParam("sortBy", sortBy)
.build();
ResponseEntity<BaseResponse<Page<DenominationLogActivityResponseDto>>> logActivityResponse =
restTemplate.exchange(
uriComponents.toUriString(),
HttpMethod.GET,
httpEntity,
new ParameterizedTypeReference<>() {
}, page, limit, order, sortBy);
if (!logActivityResponse.getStatusCode().is2xxSuccessful()) {
throw new TransactionException(
logActivityResponse.getBody().getStatus(),
logActivityResponse.getBody().getMessage(),
logActivityResponse.getBody().getErrorMessage());
}
return logActivityResponse.getBody().getData();
}
其他Spring Apps:
@GetMapping("/log")
public ResponseEntity<?> getViewTableDenomination(@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer limit,
@RequestParam(required = false) String sortBy,
@RequestParam(required = false) String order) {
Page<ViewTableResponseDto> data = service.getDenominationViewTable(page, limit, sortBy, order);
BaseResponse<Page<ViewTableResponseDto>> response = new BaseResponse<>(
String.valueOf(HttpStatus.OK.value()),
"Success",
null,
data
);
return ResponseEntity.ok(response);
}
我得到一个错误说:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.data.domain.Page` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
1条答案
按热度按时间yh2wf1be1#
当尝试序列化抽象类或接口(如Page)时,Jackson库中会出现此错误。要解决此问题,Jackson库需要提供一种序列化抽象类或接口(如Page)的方法。有几种方法可以实现:
创建实现Page的具体类当序列化抽象类或接口(如Page)时,应创建实现该接口的具体类,并将其注解为由Jackson库序列化。
实现自定义序列化器Jackson库提供了一种实现自定义序列化器的方法。这允许序列化抽象类或接口(如Page)。此方法实现起来可能很复杂,但却是序列化抽象类或接口的常用方法。
使用MixinJackson库提供了一个名为Mixin的功能,它允许在序列化抽象类或Page等接口时提供额外的信息。这种方法最容易实现,但可能会导致维护问题,因为它没有使用Jackson库提供的功能。
通过选择上述方法之一,可以解决此错误。