Оптимизация, отвечающая на rest springboot / jhipster

#spring #spring-boot #hibernate #jackson #jhipster

#spring #spring-загрузка #переход в спящий режим #джексон #jhipster

Вопрос:

Происходит странная вещь. Я использую подход jhipster для вызова службы rest, которая получает все экземпляры объекта. Отладка Я вижу, что объект заполнен, то есть внешний ключ для других объектов заполнен.

Например, объект Car имеет фирменный внешний ключ, указывающий на фирму, производящую автомобиль. Итак, я вижу в:

 return ResponseEntity.ok().headers(headers).body(page.getContent());
  

page.getContent() имеет массив из 3 машин фирмы 1, 52, 1 (поэтому я вижу car1.getFirm().getDescription()==> «XXX», «YYY», «XXX»). Все в порядке. Но когда я вижу, что json поступает в мой браузер, я вижу «XXX», «YYY», null. Расширяясь, я ничего не вижу о том, что фирма уже «используется» в другой записи ответа на тот же запрос.

Есть какие-нибудь идеи о том, почему это происходит?

P.S. Вот код службы rest, где я вижу в System.out правильные описания:

 @GetMapping("/cars")
public ResponseEntity<List<Car>> getAllCars(CarCriteria criteria, Pageable pageable) {
    log.debug("REST request to get Cars by criteria: {}", criteria);
    Page<Car> page = carQueryService.findByCriteria(criteria, pageable);
System.out.println("---------------------------------------------");
for (Car car:page.getContent()) {
    System.out.println(car.getIdFirm().getDescription());
}
System.out.println("---------------------------------------------");
    HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
    return ResponseEntity.ok().headers(headers).body(page.getContent());
}
  

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

1. можете ли вы опубликовать весь код этого метода?

Ответ №1:

Если отношения загружены в режиме ожидания, когда вы печатаете их в консоли или в отладчике, вы загружаете их, и они не равны нулю. Установив show_sql значение true, вы должны увидеть, что выполняется дополнительная инструкция select. В зависимости от того, какие аннотации JSON используются для ваших объектов, Jackson не будет их сериализовать.

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

1. Правильно. Я решил проблему с интерфейсом. Когда приходит ответ на остальные, я реализую небольшое сохранение кэша и извлекаю «использованные» вещи. Таким образом, я могу указать правильную сущность, отсутствующую в ответе.

2. Лично я считаю, что решение этой проблемы на стороне интерфейса часто требует дополнительной работы, потому что вам, возможно, придется обрабатывать несколько наблюдаемых с потенциальными ошибками, а также вам, возможно, придется обрабатывать транзакции при обновлении этого графика объектов. Обычно это происходит, когда вы понимаете, что CRUD-подход JHipster — это только начало вашего проекта, и вам следует рассмотреть агрегаты DDD для ваших моделей домена 🙂