2015-10-31 10 views
2

Привет Я пытаюсь добавить некоторые пользовательские ссылки в Paged ресурсы без успеха. Эта проблема может быть связана с DATAREST-375, но кто-то может подтвердить, что я делаю это правильно.ResourceProcessor не работает с PagedResources

@RestController 
@RequestMapping(value = "/photos") 
public class PhotoController implements ResourceProcessor<PagedResources<Resource<FileInfo>>> { 

private static final String MEDIA = "media"; 

@Autowired 
private FileSystemService photoService; 

@RequestMapping(method = RequestMethod.GET) 
public HttpEntity<PagedResources<Resource<FileInfo>>> getAllPhotos(Pageable pageable, PagedResourcesAssembler<FileInfo> asemb) 
     throws IOException { 
    Page<FileInfo> imagesInfo = photoService.getImagesInfo(pageable); 
    return new ResponseEntity<>(asemb.toResource(imagesInfo), HttpStatus.OK); 
} 

@RequestMapping(value = "/{id}", method = RequestMethod.GET) 
public ResponseEntity<GridFsResource> getPhoto(@PathVariable("id") String id) throws IOException { 
    GridFsResource imageByName = photoService.getImageById(id); 
    return new ResponseEntity<>(imageByName, HttpStatus.OK); 
} 

@Override 
public PagedResources<Resource<FileInfo>> process(PagedResources<Resource<FileInfo>> resources) { 

    Collection<Resource<FileInfo>> content = resources.getContent(); 

    for (Resource<FileInfo> resource : content) { 
     try { 
      resource.add(linkTo(methodOn(PhotoController.class).getPhoto(resource.getContent().get_id().toString())).withRel(MEDIA)); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    return resources; 
} 

}

+0

весна-данные покоятся на пути к классам? –

ответ

1

Я попытался вокруг немного и нашли путь к этому:

  1. Ваш процессор ресурс должен предназначаться тип элемента - так реализовать implements ResourceProcessor<Resource<FileInfo>>

  2. Чтобы интегрироваться с весенними данными, ваш контроллер не должен быть @RestController, но @RepositoryRestController

  3. Если вы используете RepositoryRestController вам нужно autowire в PagedResourcesAssembler вместо этого, если передать его в качестве аргумента метода

Это должно привести к чему-то вроде этого:

@RepositoryRestController 
@RequestMapping(value = "/photos") 
public class PhotoController implements ResourceProcessor<Resource<FileInfo>> { 

private static final String MEDIA = "media"; 

@Autowired 
private FileSystemService photoService; 

@Autowired 
private PagedResourcesAssembler<FileInfo> asemb; 

@RequestMapping(method = RequestMethod.GET) 
public HttpEntity<PagedResources<Resource<FileInfo>>> getAllPhotos(Pageable pageable) 
     throws IOException { 
    Page<FileInfo> imagesInfo = photoService.getImagesInfo(pageable); 
    return new ResponseEntity<>(asemb.toResource(imagesInfo), HttpStatus.OK); 
} 

@RequestMapping(value = "/{id}", method = RequestMethod.GET) 
public ResponseEntity<GridFsResource> getPhoto(@PathVariable("id") String id) throws IOException { 
    GridFsResource imageByName = photoService.getImageById(id); 
    return new ResponseEntity<>(imageByName, HttpStatus.OK); 
} 

@Override 
public PagedResources<Resource<FileInfo>> process(Resource<FileInfo> resource) { 

    resource.add(linkTo(methodOn(PhotoController.class).getPhoto(resource.getContent().get_id().toString())).withRel(MEDIA)); 

    return resource; 
} 

Я попробовал это в аналогичная настройка, как ваша, и это сработало.

Эта часть документации дает немного более подробную информацию по этому вопросу: http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_repositoryresthandlermapping

+0

Hi Mathias, Я пробовал ваше решение, но ссылка еще не заполнена. – user1048282

+0

У вас есть пружинный Rest данных в пути к классам или просто пружинному hateoas –

+0

Я использую загрузку весной и в моем П у меня есть и зависимость: org.springframework.boot весна-загрузка-стартер-данные остальное org.springframework.boot весна-загрузка-стартер-hateoas user1048282