Spring Data Rest / Spring Hateoas Пользовательский контроллер - PersistentEntityResourceAssembler

Я пытаюсь добавить некоторую дополнительную бизнес-логику к автоматически генерируемым конечным точкам из RepositoryRestResource. Пожалуйста, смотрите код ниже:

Ресурс:

@RepositoryRestResource(collectionResourceRel="event", path="event")
public interface EventRepository extends PagingAndSortingRepository<Event, Long> {

}

контроллер:

@RepositoryRestController
@RequestMapping(value = "/event")
public class EventController {

  @Autowired
  private EventRepository eventRepository;

  @Autowired
  private PagedResourcesAssembler<Event> pagedResourcesAssembler;

  @RequestMapping(method = RequestMethod.GET, value = "")
  @ResponseBody
  public PagedResources<PersistentEntityResource> getEvents(Pageable pageable,
      PersistentEntityResourceAssembler persistentEntityResourceAssembler) {

    Page<Event> events = eventRepository.findAll(pageable);

    return pagedResourcesAssembler.toResource(events, persistentEntityResourceAssembler);
  }
}

Я посмотрел на следующие две статьи stackoverflow:

Могу ли я заставить собственный контроллер отражать форматирование сгенерированных классов Spring-Data-Rest / Spring-Hateoas?Включите сериализацию HAL в Spring Boot для пользовательского метода контроллера

Я чувствую, что я рядом, но проблема, с которой я сталкиваюсь, заключается в следующем:

return pagedResourcesAssembler.toResource(events, persistentEntityResourceAssembler);

возвращает сообщение об ошибке:

"The method toResource(Page<Event>, Link) in the type PagedResourcesAssembler<Event> is not applicable 
 for the arguments (Page<Event>, PersistentEntityResourceAssembler)".

Метод toResource имеет сигнатуру метода, которая принимает ResourceAssembler, но я не уверен, как правильно реализовать это, и я не могу найти никакой документации по этому вопросу.

Заранее спасибо, - Брайан

редактировать

Моя проблема заключалась в том, что я думал, что могу переопределить методы контроллера, которые автоматически создаются из@RepositoryRestResource аннотации без необходимости создания собственного ресурса и ассемблера ресурсов. После создания ресурса и ассемблера ресурсов я смог добавить свою бизнес-логику в конечную точку.

Ресурс:

public class EventResource extends ResourceSupport {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

Ресурс Ассемблер:

@Component
public class EventResourceAssembler extends ResourceAssemblerSupport<Event, EventResource> {

  public EventResourceAssembler() {
    super(EventController.class, EventResource.class);
  }

  @Override
  public EventResource toResource(Event entity) {
    EventResource eventResource = createResourceWithId(entity.getId(), entity);
    eventResource.setName(entity.getName());
    return eventResource;
  }
}

Обновленный контроллер:

@RepositoryRestController
@RequestMapping(value = "/event")
public class EventController {

  @Autowired
  private EventRepository eventRepository;

  @Autowired
  private EventResourceAssembler eventResourceAssembler;

  @Autowired
  private PagedResourcesAssembler<Event> pageAssembler;

  @RequestMapping(method = RequestMethod.GET, value = "")
  @ResponseBody
  public PagedResources<EventResource> getEvents(Pageable pageable) {
    Page<Event> events = eventRepository.findAll(pageable);

    // business logic

    return pageAssembler.toResource(events, eventResourceAssembler);
  }
}

Что мне не нравится в этом, так это то, что кажется, что он побеждает цель наличия RepositoryRestResource. Другой подход заключается в использовании обработчиков событий, которые будут вызываться до и / или после операций создания, сохранения, удаления.

@RepositoryEventHandler(Event.class)
public class EventRepositoryEventHandler {

  @HandleBeforeCreate
  private void handleEventCreate(Event event) {
    System.out.println("1");
  }
}

Кажется, что нет никаких событий для операций findAll или findOne. В любом случае оба эти подхода, похоже, решают мою проблему расширения автоматически сгенерированных методов контроллера из RepositoryRestResource.

Ответы на вопрос(1)

Ваш ответ на вопрос