Способ передачи сложных параметров в метод весенней даты

Я пытаюсь найти какую-либо информацию по следующей проблеме: у меня есть репозиторий JPA, который был открыт для службы REST с проектом Spring Data Rest:

Page<Business> findByUser(@Param("user") User user, Pageable pageable);

где параметр user — это сущность.

Теперь, когда я пытаюсь вызвать этот метод REST из клиента (с помощью RestTemplate или Traverson), я не могу понять, как передать этот параметр...

Можно ли это реализовать без создания собственного контроллера?

заранее спасибо


person nKognito    schedule 27.04.2015    source источник


Ответы (2)


Я предполагаю, что User - это еще один управляемый объект Spring Data REST? Если это так, вы передаете URI, идентифицирующий пользователя, которого вы хотите передать методу, в ресурс метода запроса.

Traverson traverson = new Traverson(…);
traverson.follow("businesses", "search", "findByUser")
  .withTemplateParameters(Collections.singletonMap("user", "…/users/4711")).…
person Oliver Drotbohm    schedule 28.04.2015
comment
Проблема в том, что после того, как я использую формат, который вы предложили, вызов rest завершается с ошибкой: Failed to convert from type java.lang.String to type java.lang.Long for value '.../users/4'; nested exception is java.lang.NumberFormatException: For input string: ".../users/4" - person nKognito; 29.04.2015
comment
Та же проблема - stackoverflow.com/questions/21268063/ - person nKognito; 29.04.2015
comment
У меня та же проблема (не с использованием Traverson, а напрямую с API моего сервера). Итак, я сделал небольшую отладку и посмотрел, что находится в org.springframework.data.repository.support.DomainClassConverter. Внутри info.metadata.idType равно Long (это нормально, мой @Id помещается в Long), а источником является строка URI. И поэтому он пытается вызвать String -> Long Converter. И это вызывает исключение. Я думаю, что не собирался сюда приезжать, но не могу понять, что пошло не так в дороге... - person JR Utily; 12.08.2015
comment
и поэтому, если я поставлю идентификатор БД вместо URI, это сработает. Но я думал, что это не предназначено для манипулирования ими. - person JR Utily; 12.08.2015
comment
кстати, я поставил точку останова в org.springframework.data.rest.core.UriToEntityConverter, и она так и не сработала. Так может проблема с регистрацией этого конвертера? - person JR Utily; 12.08.2015

Я наконец-то понял. Посмотрите на эту проблему в Spring JIRA.

Способ запроса зависит от вашей версии Spring Data Rest. Если у вас версия 2.4+, вы должны использовать URI. Если у вас более старая версия, вы должны использовать первичный ключ.

Поэтому вам может потребоваться раскрыть свои первичные ключи, если у вас более старая версия SDR. Этот вопрос может помочь вам справиться с этим.

person JR Utily    schedule 13.08.2015