findBy URI не работает в Spring Data Rest

По умолчанию в Spring Data Rest @Id объекта не отображается. В соответствии с правилами REST мы должны использовать URI ресурса для ссылки на него. Учитывая это предположение, запросы findBy должны работать, если вы передаете им URI, но они этого не делают.

Например, предположим, что у меня есть отношение «один ко многим» между учителем и учеником. Я хочу найти учеников по учителю.

List<Student> findByTeacher(Teacher teacher)

http://localhost:8080/repositories/students/search/findByTeacher?teacher=http://localhost:8080/repositories/teachers/1

Это не работает, потому что платформа пытается преобразовать URI учителя в Long. Я получаю эту ошибку, которая говорит: «Не удалось преобразовать тип java.lang.String в тип java.lang.Long».

Я что-то упускаю?


person ivan    schedule 21.01.2014    source источник
comment
это еще актуально? У меня та же проблема. title="способ передачи сложных параметров в метод весенней даты"> stackoverflow.com/questions/29897351/   -  person nKognito    schedule 29.04.2015


Ответы (2)


  1. Вы можете выставить @Id, настроив веб-инициализатор

    // Веб-инициализатор @Configuration общедоступный статический класс RespositoryConfig extends RepositoryRestMvcConfiguration { @Override protected void configureRepositoryRestConfiguration (RepositoryRestConfiguration config) { config.exposeIdsFor (Teacher.class); } }

  2. Хорошо изменить список на страницу

    Список findByTeacher (Учитель-учитель)

to

Page<Student> findByTeacher(@Param("teacher) Teacher teacher, Pageable pageable);

Также обратите внимание, что вместе с Pageable требуется аннотация @Param. Последнее требуется, потому что возвращаемый тип "Страница"

3. Последние снимки, а не вехи, работают нормально

person Stackee007    schedule 22.01.2014
comment
1. Это хороший обходной путь. 2. Хорошая мысль. 3. Я использую последние снимки, и они НЕ работают. - person ivan; 28.01.2014
comment
Я использую последние снимки, и это работает для меня. Может проблема где-то в другом? След? - person Stackee007; 28.01.2014

См. https://jira.spring.io/browse/DATAREST-502.

В зависимости от вашей версии Spring Data он будет работать так, как вы хотите, или нет. Если вы используете Spring Data 2.4, вам необходимо передать URI. Если у вас предыдущая версия, вам нужно передать идентификатор.

person JR Utily    schedule 13.08.2015