当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Rest Client中获取页面内容

仲承福
2023-03-14

我有以下REST控制器:

@RestController
class PersonController {

   final PersonService personService

   @Autowired
   PersonController( PersonService personService ){
    this.personService = personService
   }

   @RequestMapping(value="/persons",method=RequestMethod.GET)
   Page<Person> list( Pageable pageable){
     Page<Person> persons = personService.listAllByPage(pageable)
     persons
   } 
}

以下存储库:

interface PersonRepository extends PagingAndSortingRepository<Person,Integer> {

}

以及服务:

interface PersonService {
   Page<Person> listAllByPage(Pageable pageable)
}

@Service
class PersonServiceImpl implements PersonService {

   final PersonRepository personRepository

   @Autowired
   PersonServiceImpl(PersonRepository personRepository){
      this.personRepository = personRepository
   }

   @Override
   Page<Person> listAllByPage(Pageable pageable) {
       personRepository.findAll(pageable)
   } 
}

服务器按预期工作,但客户端有问题。我不知道如何从回复中获取内容。

在客户端我有一个这样的方法:

@Override
public List<PersonDTO> findAll() throws DataAccessException {
    try {
        restClient.getServiceURI(PERSON_URL));
        ResponseEntity<PageImpl<PersonDTO>> response =
            restClient.exchange(
                restClient.getServiceURI(PERSON_URL),
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<PageImpl<PersonDTO>>() {
                });
        return response.getBody().getContent();
    } catch (Exception e){}
}

但是我有以下例外:

 org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.springframework.data.domain.PageImpl]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.data.domain.PageImpl` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

现在我阅读了这个stackoverflow条目并添加了CustomPageImpl类:如何使用页面

我将客户端中的方法更改为以下内容:

@Override
public List<PersonDTO> findAll() throws DataAccessException {
    try {
        restClient.getServiceURI(PERSON_URL));
        ResponseEntity<CustomPageImpl<PersonDTO>> response =
            restClient.exchange(
                restClient.getServiceURI(PERSON_URL),
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<CustomPageImpl<PersonDTO>>() {
                });
        return response.getBody().getContent();
    } catch (Exception e){}
}

但现在我得到了几乎相同的例外:

 org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.springframework.data.domain.Pageable]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.data.domain.Pageable` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

共有1个答案

卜高超
2023-03-14

在您提到的同一个堆栈溢出条目中,有一个针对exchange请求的解决方案。您可以使用PagedResources而不是页面/自定义实现。有关更多详细信息,请参阅此链接。

以下是您的要求:-

ResponseEntity<PagedResources<PersonDTO>> response =
            restClient.exchange(
                restClient.getServiceURI(PERSON_URL),
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<PagedResources<PersonDTO>>() {
                });
PagedResources<PersonDTO> resBody = response.getBody();
        return resBody.getContent();// Returns a collection 
 类似资料:
  • 当我使用关于我们的

  • 问题内容: 在Linux中,如何获取URL并在shell脚本的变量中获取其内容? 问题答案: 您可以使用命令下载页面并将其读取为变量,如下所示: 我们使用的选项允许我们指定将页面内容转储到的文件的名称。我们指定将转储放入标准输出并将其收集到变量中。您可以添加安静选项以关闭wget输出。 您还可以为此使用curl命令: 我们需要使用该选项,因为我们请求的页面可能已经移动。在这种情况下,我们需要从新位

  • 问题内容: 我使用Crawljax抓取了动态网页。我可以获取当前的ID,状态和DOM。但我无法获得网站内容。任何人都可以帮助我吗? 如何获取动态/ Java脚本网页内容。 问题答案: 我们可以获取网站源代码cc.getBrowser()。getStrippedDom()); 或cc.getCurrentState()。getDocument();或 此编码是返回源代码(css / java脚本文件

  • 问题内容: 我在php(string)中有一个div,我想获取内容。 例如: 而且我要 样式在变化,我只知道div ID。 更新 这是我的代码,与turbod源相同,结果也相同。 所以这是原始的html 在此代码之后,我得到以下信息:链接 问题答案: 使用php DomDocument类。http://www.php.net/manual/zh/class.domdocument.php

  • 问题内容: 在PHP中,如何获取当前页面的URL?最好只是http://domain.com之后的部分。 问题答案: $_SERVER[‘REQUEST_URI’] 有关$_SERVER数组中可用信息的更多详细信息,请参见PHP手册页。 如果您还需要查询字符串(URL中的后面的位),则该部分位于此变量中:

  • 问题内容: 我正在尝试在我的项目中获取字段页面,但我不知道如何获取每个字段和字段的页码。我有此代码: 如何获得字段的页码? 谢谢罗恩 问题答案: 这将向您显示该字段出现在什么页面上(从0开始):