IllegalArgumentException: не удается десериализовать экземпляр

#java #spring #amazon-web-services #spring-boot #amazon-dynamodb

#java #весна #amazon-web-services #весенняя загрузка #amazon-dynamodb

Вопрос:

У меня есть приложение spring boot, в котором у меня есть BlogsService, вызывающий репозиторий Blogs, и он должен возвращать список блогов, соответствующих переданному поисковому запросу. Я получаю следующее, что вызвано строкой 76. Есть идеи? Спасибо

Строка 76:

 return objectMapper.convertValue(searchEntity, BlogDetailsResponse.class);
 

IllegalArgumentException: не удается десериализовать экземпляр package.dto.BlogDetailsResponse из токена
START_ARRAY в [Источник: НЕИЗВЕСТЕН; строка: -1, столбец: -1]
в com.cor.devsquareawsservice.services.impl.BlogServiceImpl.searchBlogs(BlogServiceImpl.java:76) ~[classes/:na]

BlogServiceImpl.java

   @Override
  public BlogDetailsResponse searchBlogs(SearchBlogsRequest searchBlogsRequest) {
    try {
      final List<BlogEntity> searchEntity = blogsRepository.searchBlogs(searchBlogsRequest.getSearchBlogsQuery());
      return objectMapper.convertValue(searchEntity, BlogDetailsResponse.class);
    } catch (final Exception exception) {
      log.error(exception);
      throw new DevSquareDynamoDBException(ExceptionConstants.SERVICE_CREATE_BLOG_EXCEPTION_MESSAGE, exception);
    }
  }
 

BlogsRepository.java

   public List<BlogEntity> searchBlogs(String query) {
    try {
      DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
      scanExpression.addFilterCondition("title", new Condition()
              .withComparisonOperator(ComparisonOperator.CONTAINS)
              .withAttributeValueList(new AttributeValue().withS(query)));
      return dynamoDBMapper.scan(BlogEntity.class, scanExpression);
    } catch (Exception ex) {
      log.error("failed to get blogs > "   query);
    }
    return null;
  }
 

Комментарии:

1. searchEntity — это список BlogEntity . BlogDetailsResponse — это не список, это объект. Пожалуйста, предоставьте более подробную информацию о коде BlogDetailsResponse и BlogEntity.

Ответ №1:

Это решило мою проблему. Мне нужно было сопоставить список и скрыть каждую сущность.

   public List<BlogDetailsResponse> searchBlogs(SearchBlogsRequest searchBlogsRequest) {
    try {
      return blogsRepository.searchBlogs(searchBlogsRequest.getSearchBlogsQuery()).stream().map(e -> objectMapper
              .convertValue(e, BlogDetailsResponse.class))
              .collect(Collectors.toList());
    } catch (final Exception exception) {
      log.error(exception);
      throw new DevSquareDynamoDBException(ExceptionConstants.SERVICE_SEARCH_BLOGS_EXCEPTION_MESSAGE, exception);
    }
  }