2016-03-15 8 views
1

играет с Solr весной данных здесь ... Я могу вернуться на страницу результатов в формате HATEOAS, который отлично т.е.Spring Data Solr + HATEOAS

@RequestMapping("/findAllPaged") 
HttpEntity<PagedResources<Module>> findAllPaged(Pageable pageable, PagedResourcesAssembler assembler) { 

    Page<Module> page = moduleRepository.findAll(pageable) 
    return new ResponseEntity<>(assembler.toResource(page), HttpStatus.OK); 
} 

, но как я могу получить возврат товара метод один объект в правильном формате HATEOAS

настоящее время я следующее, что дает мне основную JSon сериализации, но не знаете, как получить HATEOAS:

@RequestMapping("/module/{id}") 
Module module(@PathVariable String id) { 
    moduleRepository.findOne(id) 
} 

также как бы я вернуть список в HATEOAS форме?

@RequestMapping("/findAll") 
List<Module> findAll() { 
    moduleRepository.findAll().content 
} 
+0

'Ресурс ' – zeroflagL

+0

поэтому я изменил его так: @RequestMapping ("/ модуль/{идентификатор } ") Ресурс модуль (@PathVariable String id) { новый Ресурс <> (moduleRepository.findOne (id)) } но он просто дает мне базовый json: { "name": "name1", "description": "description1" } .. не должен ли он иметь еще несколько такие поля, как _self и т. д.? – 1977

+0

Если вам нужны ссылки, вы должны добавить их. Весна не знает, какие ссылки вы хотите иметь. Вы можете взглянуть на Spring Data REST. Эта структура обрабатывает все автоматически, и вам даже не нужно писать контроллеры. – zeroflagL

ответ

0

На самом деле я обнаружил, что если я аннотирование моего хранилища, как это с RepositoryRestResource, то я автоматически получить отдых hateaos услуги выставлена ​​для меня

@RepositoryRestResource 
interface ModuleRepository extends SolrCrudRepository<Module, String>{ 

    /** 
    * Does exact (equals) query 
    * @param name 
    * @param description 
    * @param pageable 
    * @return 
    */ 
    Page<Module> findByNameOrDescription(@Param(value = "name")@Boost(2.0F) String name, @Param(value = "description") String description, Pageable pageable); 

/** 
* Does like query and ignores case 
* @param name 
* @param description 
* @param pageable 
* @return 
*/ 
Page<Module> findByNameContainingOrDescriptionContainingAllIgnoreCase(@Param(value = "name")String name, @Param(value = "description") String description, Pageable pageable); 

/** 
* Custom query example 
* @param name 
* @param pageable 
* @return 
*/ 
@Query(value = "name:*?0*") 
Page<Module> myCustomQuery(@Param(value = "name")String name,Pageable pageable); 

@Query(value = "name:*?0* OR description:*?0* ") 
Page<Module> myOtherCustomQuery(@Param(value = "name")String name,Pageable pageable); 

Page<Module> findByNameContainingIgnoreCase(@Param(value = "name")String name, Pageable pageable); 



} 

например

http://localhost:8080/modules/ все документы

http://localhost:8080/modules/1 один Doc

http://localhost:8080/modules?page=0&size=4&sort=name,desc выгружаемого результаты http://localhost:8080/modules/search/findByNameOrDescription?name=name1&description=description2&page=0&size=10
http://localhost:8080/modules/search/findByNameContainingOrDescriptionContainingAllIgnoreCase?name=mAt&description=sCi&page=0&size=10