Spring Data REST - Нераспознанное поле "_embedded", использующее список сущностей, Java HATEOAS - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь получить список объектов из следующего ответа REST HAL:

    {
  "_embedded" : {
    "posts" : [ {
      "branch" : 1,
      "article" : "aaaaaaa",
      "featuredImage" : "aaaaaaa",
      "authorId" : 1,
      "datePublished" : "2020-05-05T09:11:13.336+0000",
      "commentsEnabled" : true,
      "enabled" : false,
      "views" : 0,
      "snippetTitle" : null,
      "snippetDescription" : null,
      "comments" : null,
      "_links" : {
        "self" : {
          "href" : "http://localhost:8081/posts/1"
        },
        "post" : {
          "href" : "http://localhost:8081/posts/1"
        },
        "categories" : {
          "href" : "http://localhost:8081/posts/1/categories"
        }
      }
    }, {
      "branch" : 1,
      "article" : "aaaaaaa",
      "featuredImage" : "aaaaaaa",
      "authorId" : 1,
      "datePublished" : "2020-05-05T10:45:15.999+0000",
      "commentsEnabled" : true,
      "enabled" : false,
      "views" : 0,
      "snippetTitle" : null,
      "snippetDescription" : null,
      "comments" : null,
      "_links" : {
        "self" : {
          "href" : "http://localhost:8081/posts/3"
        },
        "post" : {
          "href" : "http://localhost:8081/posts/3"
        },
        "categories" : {
          "href" : "http://localhost:8081/posts/3/categories"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8081/posts/search/byAuthorId?authorId=1&page=0&size=10"
    }
  },
  "page" : {
    "size" : 10,
    "totalElements" : 3,
    "totalPages" : 1,
    "number" : 0
  }
}

Я хотел бы сопоставить эти объекты с этим классом:

@Setter
@Getter
@AllArgsConstructor
public class Post {
  private int id;
  private int branch;
  private String article;
  private Date datePublished;
  private String featuredImage;
  private Boolean commentsEnabled;
  private Boolean enabled;
  private int views;
  private String snippetTitle;
  private String snippetDescription;
}

Однако, Я все время получаю сообщение об ошибке:

Нераспознанное поле «_embedded» (класс org.springframework.hateoas.PagedModel), не отмеченное как игнорируемое (3 известных свойства: «ссылки», «страница», «содержимое» "])

С этим кодом:

  ObjectMapper mapper = new ObjectMapper();
  MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

  messageConverter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
  messageConverter.setObjectMapper(mapper);

  ResponseEntity<PagedModel<Post>> responseEntity =
    new RestTemplate(Arrays.asList(messageConverter)).exchange(uri, HttpMethod.GET, HttpEntity.EMPTY, new ParameterizedTypeReference<PagedModel<Post>>() {});

Существуют следующие версии:

Версия привязки данных Джексона: 2.11.0

Версия Spring-hateoas: 1.0.5.RELEASE

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 05 мая 2020

Структура ответа выглядит как PagedResources<T> тип.

Используйте org.springframework.hateoas.PagedResources в ParameterizedTypeReference

ResponseEntity<PagedResources<Post>> responseEntity =
    new RestTemplate(Arrays.asList(messageConverter)).exchange(uri, HttpMethod.GET, HttpEntity.EMPTY, new ParameterizedTypeReference<PagedResources<Post>>() {});
...