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.
Я не могу понять, что я делаю неправильно в этом случае. У вас есть идеи, как я могу это исправить?
Спасибо Себ
Когда я это пробовал, я получил следующее исключение: RuntimeException: вы должны определить тип @Consumes в своем клиентском методе или интерфейсе или указать значение по умолчанию при вызове target.proxy (UserApi.class) ... –
может Вы отлаживаете свой код клиента, чтобы понять, почему выбрано исключение? – wero
Я отлаживал его, и проблема, похоже, встречается в методе RestEasyUriBuilder.buildFromValues. Этот метод вызывается без значений. Он находит, что он должен иметь один параметр («userid»), поэтому он генерирует исключение. Вопрос в том, почему он не смог найти ценность? –