Как сформировать часть ресурса protobuf в теле http-запроса и протестировать его с помощью клиента dhc или почтальона для остальных служб

Я создал.proto сообщение, и я выставляю службу отдыха, которая выглядит следующим образом

@Path("/test")
public interface test{

@POST
@Produces("application/x-protobuf")
@Consumes("application/x-protobuf")
public Response getProperties(TestRequest testrq);
}

Теперь TestRequest - это сгенерированный Java-файл.protobuf. Как передать его в теле запроса?

это будет формат файла.proto

message TestRequest
{
    string id = 1;
    string name = 2;
    enum TestType
    {
        Test=1
    }
   TestType testType = 3; 
}

3 ответа

Решение
You can use this code snippet to test the protobuf as i don't find any solution with postman or dhcclient


    URL url = new URL("https://localhost:8080/test");
     HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
     urlc.setDoInput(true);
     urlc.setDoOutput(true);
     urlc.setRequestMethod("POST");
     urlc.setRequestProperty("Accept", "application/x-protobuf");
     urlc.setRequestProperty("Content-Type","application/x-protobuf");
     TestRequestPb.TestRequest.Builder testRequestBuilder=TestRequestPb.TestRequest.newBuilder();
     TestRequest testRequest = testRequestBuilder.build();
     testRequest.writeTo(urlc.getOutputStream());
    testRequest=TestRequest.newBuilder().mergeFrom(urlc.getInputStream()).build();

Дайте Protoman попробовать, если вам нужен простой клиент Protobuf API.

Отказ от ответственности: это мой побочный проект

Вы можете использовать protoCURL, инструмент командной строки, для отправки полезных данных Protobuf на конечные точки HTTP REST и их отладки. Он работает так же, как и cURL, за исключением того, что вы можете использовать текстовый формат Protobuf или формат JSON для описания вашего запроса, который будет автоматически кодироваться и декодироваться. Поскольку принятый ответ на самом деле не использует почтальона или клиента dhc, я думаю, что CLI может быть приемлемым для вас или других читателей.

В вашем случае запрос будет выглядеть так:

      protocurl -I path/to/proto -i ..TestRequest -o ..TestResponse \
  -u http://localhost:8080/test \
  -d "id: 'myid', name: 'myname', testType: Test"

если ваш файл .proto находится в папке path/to/proto.

Однако, поскольку в вашем файле .proto не указан тип ответа TestResponse, отобразить его невозможно. Вам нужно будет добавить ответное сообщение в ваш файл .proto. Однако существует нерешенная проблема с отображением ответов даже без схемы сообщений.

Вы можете найти примеры выходных данных в репозитории.

Отказ от ответственности: я создатель этого и сделал это, потому что столкнулся с той же проблемой.

Другие вопросы по тегам