Как использовать метод PATCH с CL_REST_HTTP_CLIENT? - PullRequest
3 голосов
/ 11 февраля 2020

Я пытаюсь использовать внешнюю службу REST. Пример:

DATA : lo_client TYPE REF TO if_http_client.

cl_http_client=>create_by_url(
  EXPORTING
    url                = 'http://my_url'
  IMPORTING
    client             = lo_client
  EXCEPTIONS
    argument_not_found = 1
    plugin_not_active  = 2
    internal_error     = 3
    OTHERS             = 4 ).

DATA(rest_client) = NEW CL_REST_HTTP_CLIENT( lo_client ).

rest_client->GET( ).

GET, POST, PUT и DELETE в порядке, поскольку они реализованы в классе CL_REST_HTTP_CLIENT.

methods supported

Кто-нибудь нашел решение использовать метод PATCH или как я могу использовать его иначе?

PS: константа для PATCH существует (if_rest_message=>gc_method_patch), но, как я уже сказал, она не реализована (send_receive).

Спасибо.

Ответы [ 2 ]

4 голосов
/ 11 февраля 2020

Вы можете использовать CL_HTTP_CLIENT, чтобы свободно устанавливать метод, CL_REST_HTTP_CLIENT также использует этот класс под капотом.

DATA : lo_client TYPE REF TO if_http_client.

cl_http_client=>create_by_url(
  EXPORTING
    url                = 'http://my_url'
  IMPORTING
    client             = lo_client
  EXCEPTIONS
    argument_not_found = 1
    plugin_not_active  = 2
    internal_error     = 3
    OTHERS             = 4 ).

lo_client->request->set_method( 'PATCH' ).
lo_client->request->set_content_type( 'application/json' ).

lo_client->send( ).

lo_client->receive(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    OTHERS                     = 4 ).
1 голос
/ 11 февраля 2020

Это действительно не поддерживается. Быстрый и грязный способ заставить его работать - скопировать класс и добавить следующий метод:

method PATCH.
  send_receive( iv_http_method = if_rest_message=>gc_method_patch io_entity = io_entity ).
endmethod.
...