Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据Rest/Spring Hateoas自定义控制器-PersistentEntityResourcesAssembler_Java_Spring_Spring Mvc_Spring Data Rest_Spring Hateoas - Fatal编程技术网

Java Spring数据Rest/Spring Hateoas自定义控制器-PersistentEntityResourcesAssembler

Java Spring数据Rest/Spring Hateoas自定义控制器-PersistentEntityResourcesAssembler,java,spring,spring-mvc,spring-data-rest,spring-hateoas,Java,Spring,Spring Mvc,Spring Data Rest,Spring Hateoas,我试图向RepositoryRestResource中自动生成的端点添加一些额外的业务逻辑。请参阅下面的代码: 资源: @RepositoryRestResource(collectionResourceRel="event", path="event") public interface EventRepository extends PagingAndSortingRepository<Event, Long> { } public class EventResource e

我试图向RepositoryRestResource中自动生成的端点添加一些额外的业务逻辑。请参阅下面的代码:

资源:

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

}
public class EventResource extends ResourceSupport {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}
返回一个错误,说明:

"The method toResource(Page<Event>, Link) in the type PagedResourcesAssembler<Event> is not applicable 
 for the arguments (Page<Event>, PersistentEntityResourceAssembler)".
资源汇编程序:

@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;
  }
}

findAll或findOne操作似乎没有任何事件。无论如何,这两种方法似乎都解决了我从RepositoryRestResource扩展自动生成的控制器方法的问题。

它需要一个PagedResourcesAssembler,如果你要求,Spring会为你注入一个

public PagedResources<Foo> get(Pageable page, PagedResourcesAssembler<Foo> assembler) {
    // ...
}
您提供了
ResourceAssembler
,它告诉Spring如何将
事件
转换为
资源
。Spring将
PagedResourcesAssembler
注入控制器方法以处理分页链接。通过调用
toResource
并传入插入的
pageAssembler
来组合它们

最终结果可以像上面那样简单地作为一个主体返回。您还可以使用诸如
HttpEntity
之类的工具来获得对状态代码和标题的更多控制


注意:您提供的
resourcesassembler
可以简单地包装资源,例如
Event
,使用
resource
对象。一般来说,您需要添加任何相关链接。

要破解它,您只需使用
PagedResourcesSembler
即可:

@RequestMapping(method = RequestMethod.GET, value = "")
@ResponseBody
public PagedModel<PersistentEntityResource> getEvents(
    Pageable pageable,
    PersistentEntityResourceAssembler persistentAssembler,
    PagedResourcesAssembler<Object> pageableAssembler
) {
    return pageableAssembler.toModel(
        (Page<Object>) repository.findAll(pageable),
        persistentAssembler
    );
  }
@RequestMapping(method=RequestMethod.GET,value=”“)
@应答器
公共页面模型getEvents(
可分页可分页,
PersistentEntityResourcesAssembler persistentAssembler,
PagedResourcesAssembler pageableAssembler
) {
返回pageableAssembler.toModel(
(第页)repository.findAll(可分页),
持久装配器
);
}

可能会提供更多信息。@Jason感谢此链接确实帮助我找到了正确的方向。感谢您的回复。我认为也许可以从RepositoryRestResource注释重写自动生成的端点,而不必创建EventResource和EventResourceAssembler。我认为最好的解决方案可能是使用带有RepositoryEventHandler注释的类,并使用REST导出器发出的事件。这样我就不必接触我的EventRepository,我可以将我的业务逻辑添加到这些端点。
@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);
  }
}
@RepositoryEventHandler(Event.class)
public class EventRepositoryEventHandler {

  @HandleBeforeCreate
  private void handleEventCreate(Event event) {
    System.out.println("1");
  }
}
public PagedResources<Foo> get(Pageable page, PagedResourcesAssembler<Foo> assembler) {
    // ...
}
private ResourceAssembler<Event> eventAssembler = ...;
public PagedResources<Event> get(Pageable page, PagedResourcesAssembler<Event> pageAssembler) {
    Event event = ...;
    return eventAssembler.toResource(event, pageAssembler);
}
@RequestMapping(method = RequestMethod.GET, value = "")
@ResponseBody
public PagedModel<PersistentEntityResource> getEvents(
    Pageable pageable,
    PersistentEntityResourceAssembler persistentAssembler,
    PagedResourcesAssembler<Object> pageableAssembler
) {
    return pageableAssembler.toModel(
        (Page<Object>) repository.findAll(pageable),
        persistentAssembler
    );
  }