2016-01-18 5 views
0

Hy, у меня проблема с использованием метода клиента resteasy с помощью PathParam. Я объясняю:Клиент RestEasy не может использовать аргументы @PathParam

Я интерфейс, используемый на стороне клиента и на стороне сервера:

@Path("/1.0/user") 
@Consumes({"application/json"}) 
@Produces({"application/json"}) 
public interface UserApi { 
    @GET 
    @Path("/{userid}/followers") 
    @PrivateApi 
    public List<DXUser> getUserFollowers(@PathParam("userid") long userId); 
} 

На стороне сервера, это работает, как и ожидалось, у меня есть конкретный класс, реализующий этот интерфейс и мой API является онлайн. Нет проблем. Я могу назвать этот метод API из URL: http://myapi.dev/1.0/user/1234/followers

Но, на стороне клиента, я использую интерфейс для вызова API легко с помощью следующего кода:

ResteasyClient client = new ResteasyClientBuilder().build(); 
ResteasyWebTarget target = client.target("http://myapi.dev"); 
UserApi api = target.proxy(UserApi.class); 
List<DXUser> users = api.getUserFollowers(1234); 

И я получаю исключение: Java .lang.IllegalArgumentException: вы не указали достаточные значения для заполнения параметров пути

Я пытаюсь использовать @POST вместо метода @GET. У меня такая же ошибка. Я пробую с @QueryParam, и он работает! Поэтому проблема швов касается только @PathParam.

Я не могу понять, что я делаю неправильно в этом случае. У вас есть идеи, как я могу это исправить?

Спасибо Себ

+0

Когда я это пробовал, я получил следующее исключение: RuntimeException: вы должны определить тип @Consumes в своем клиентском методе или интерфейсе или указать значение по умолчанию при вызове target.proxy (UserApi.class) ... –

+0

может Вы отлаживаете свой код клиента, чтобы понять, почему выбрано исключение? – wero

+0

Я отлаживал его, и проблема, похоже, встречается в методе RestEasyUriBuilder.buildFromValues. Этот метод вызывается без значений. Он находит, что он должен иметь один параметр («userid»), поэтому он генерирует исключение. Вопрос в том, почему он не смог найти ценность? –

ответ

1

Я сожалею, что я сделал ошибку.

Я импортировал javax.websocket.server.PathParam аннотацию вместо javax.ws.rs.PathParam.

Таким образом, Resteasy ClientProxy не смог создать хороший PathParamProcessor.

Извините за эту ошибку.

Смежные вопросы