Java-клиент для веб-службы REST с Netbeans

#java #web-services #rest #netbeans #soapui

#java #веб-сервисы #rest #netbeans #soapui

Вопрос:

Я пытаюсь написать Java-клиент для веб-службы REST, определенный таким образом:

 @Path("/")
public class Translator {
  public Translator() { }

  @POST
  @Produces("application/json")
  @Path("/translate")
  public String translate(@QueryParam("dir") String dir,  @QueryParam("string")String string, @QueryParam("user")String user, @QueryParam("key")String key){
    return doTranslation(dir, string, user, key);
  }
}
  

Я попытался использовать опцию NetBeans «Новый клиент Restful Java», выбрав в качестве исходного кода REST проект, содержащий веб-сервис.

Но он генерирует класс с одним методом, у которого нет параметров:

 public class NewJerseyClient {
  private WebTarget webTarget;
  private Client client;
  private static final String BASE_URI = "http://localhost:8086/TranslatorREST/Translator";

  public NewJerseyClient() {
    client = javax.ws.rs.client.ClientBuilder.newClient();
    webTarget = client.target(BASE_URI);
  }

  public String translate() throws ClientErrorException {
    return webTarget.path("translate").request().post(null, String.class);
  }
}
  

Поэтому я не вижу способа передать параметры веб-службе.

Я могу успешно использовать этот веб-сервис из SoapUI, при условии, что я не включаю опцию «Post QueryString», и в этом случае веб-служба получает «null» для всех параметров.

Заранее спасибо.

Ответ №1:

Вы можете добавить параметры с помощью .Параметр запроса() :

 public class NewJerseyClient {
  private WebTarget webTarget;
  private Client client;
  private static final String BASE_URI = "http://localhost:8086/TranslatorREST/Translator";

  public NewJerseyClient() {
    client = javax.ws.rs.client.ClientBuilder.newClient();
    webTarget = client.target(BASE_URI);
  }

  public String translate() throws ClientErrorException {
    return webTarget.path("translate").queryParam("dir", "myDir")
        .queryParam("string", "myString")
        .queryParam("user", "myUser")
        .queryParam("key", "myKey").request().post(null, String.class);
  }
}