json 在get请求中传递Spring Page

5kgi1eie  于 2023-04-13  发布在  Spring
关注(0)|答案(1)|浏览(156)

我需要使用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
yh2wf1be

yh2wf1be1#

当尝试序列化抽象类或接口(如Page)时,Jackson库中会出现此错误。要解决此问题,Jackson库需要提供一种序列化抽象类或接口(如Page)的方法。有几种方法可以实现:
创建实现Page的具体类当序列化抽象类或接口(如Page)时,应创建实现该接口的具体类,并将其注解为由Jackson库序列化。
实现自定义序列化器Jackson库提供了一种实现自定义序列化器的方法。这允许序列化抽象类或接口(如Page)。此方法实现起来可能很复杂,但却是序列化抽象类或接口的常用方法。
使用MixinJackson库提供了一个名为Mixin的功能,它允许在序列化抽象类或Page等接口时提供额外的信息。这种方法最容易实现,但可能会导致维护问题,因为它没有使用Jackson库提供的功能。
通过选择上述方法之一,可以解决此错误。

相关问题