2016-03-10 11 views
2

У меня есть существующий клиентский интерфейс Spring Cloud Feign, который имеет много сопоставлений для моего API-интерфейса на стороне сервера. Я добавляю несколько новых методов, и у меня внезапно возникает ошибка. Я пытаюсь добавить метод формы:Spring Cloud Feign not processing @RequestMapping UriTemplate

@RequestMapping(value = "/tasks/{id}", method = GET) 
public Resource<Task> getTask(@PathVariable("id")Long id); 

Все компилируется нормально, но когда я пытаюсь сделать вызов в getTask() метод выше, я всегда получаю IllegalArgumentException жалуется на URL не действительный. Это верно, потому что URL-адрес по-прежнему содержит UriTemplate {id}.

Полный стек: java.lang.IllegalArgumentException: недопустимый символ в пути по индексу 29: http://connect/connect/tasks/ {ID} в java.net.URI $ Parser.fail (URI.java:2848) на Java. net.URI $ Parser.checkChars (URI.java:3021) at java.net.URI $ Parser.parseHierarchical (URI.java:3105) на java.net.URI $ Parser.parse (URI.java:3053) на java.net.URI. (URI.java:588) на java.net.URI.create (URI.java:850) на feign.ribbon.RibbonClient.execute (RibbonClient.java:64) at feign .SynchronousMethodHandler.executeAndDecode (SynchronousMethodHandler.java:92) при симуляции .SynchronousMethodHandler.invoke (SynchronousMethodHandler.java:71) в feign.ReflectiveFeign $ FeignInvocationHandler.invoke (ReflectiveFeign.java:94) на com.sun.proxy. $ Proxy55.getTask (Unknown Source)

Есть десятки других методов в том же интерфейсе, которые используют этот точный шаблон, и все работает нормально. Я не могу для жизни понять, почему Feign/Spring неожиданно сталкивается с этим методом. Я пробовал все возможные комбинации настроек и способы записи метода. Если я просто удалю {id}, вызов пройдет, но, очевидно, вернет неверные данные, так как отсутствует идентификационная часть URI.

Я использую Spring Cloud Angel.SR6 с Spring Boot 1.2.8 и Feign 8.5.0.

+0

Это странно. Есть ли проект, который воспроизводит проблему? – spencergibb

+0

Я согласен, что это довольно странно. Я смутно вспоминаю об этом в прошлом, и у меня есть представление, что это побочный эффект чего-то другого. Тот факт, что аспект адреса хоста/порта URL-адреса неверен, также был несколько связан. К сожалению, это было довольно давно, и в этот момент код не был таким стабильным, что я не помню, как это было разрешено. У меня нет кода, который я могу опубликовать в любом месте, и у меня еще не было возможности воспроизвести код примера. Я надеюсь, что кто-то другой сможет указать мне в правильном направлении. –

+0

Я просто попробовал этот метод, и он работает для меня с использованием 1.1.0M5. Можете ли вы поделиться всем своим классом клиентов? – Newbie

ответ

5

Я решаю свою проблему. Оказывается, сообщение об ошибке довольно вводило в заблуждение. Я получаю, что метод передавался с нулевым значением, поэтому для шаблона URI ничего не было. С его интерфейсом я не могу добавить логику для утверждения требования Not Null, по крайней мере, насколько я знаю сейчас.

Как только я понял это и разрешил его перед вызовом, исключение IllegalArgumentException было устранено. Обратите внимание, что нет, где нет факта, что вход был отмечен NULL в трассировке стека в моей первоначальной ноте.