отправка запроса с запросом get?

#java #spring-boot #fuseki

#java #весенняя загрузка #fuseki

Вопрос:

Я хочу отправить запрос (тело) с запросом get, я знаю, что это не имеет смысла, но я хочу выполнить запрос get на другой конечной точке (здесь это сервер Fuseki), как мы делаем в запросе post.

 public static final MediaType sparqlGet = MediaType.get("application/x-www-form-urlencoded; charset=utf-8");

static OkHttpClient client = new OkHttpClient();
    
public static String test() throws IOException, InterruptedException {
         RequestBody body = RequestBody.create(
                 "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>rnPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>rnPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>rnSELECT * WHERE {rn  ?sub <http://www.semanticweb.org/hightech/ontologies/2019/8/untitled-ontology-4#domainName> ?obj .rn}rn"
                 , sparqlGet);
            Request request = new Request.Builder()
                .url("http://localhost:3030/eduDataSet/query")
                .get()
                .build();
            try (Response response = client.newCall(request).execute()) {
              return response.body().string();
            }catch (Exception e) {
                return "exc";
            }


    public static String postTest() throws IOException {
    
        RequestBody body = RequestBody.create(
                "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>rnPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>rnPREFIX xx: <http://www.semanticweb.org/hightech/ontologies/2019/8/untitled-ontology-4#>rnINSERT DATA{rnt<http://www.semanticweb.org/hightech/ontologies/2019/8/untitled-ontology-4#Domain5> xx:domainName "spring".rn  t<http://www.semanticweb.org/hightech/ontologies/2019/8/untitled-ontology-4#Domain5> xx:domainId "spring".rnrn}rnrn"
                , sparql);

        Request request = new Request.Builder()
            .url ("http://localhost:3030/eduDataSet/update")
            .post(body)
            .build();
        try (Response response = client.newCall(request).execute()) {
          return response.body().string();
        }catch (Exception e) {
            return "exc";
        }
    }
  

Ответ №1:

У GET нет тела запроса. Таким образом, все параметры должны отображаться в URL или в заголовке.

Комментарии:

1. спасибо за ответ, я понимаю, но каков способ выполнения запроса на другой конечной точке? Я попытался использовать post и отправить ему запрос select в виде тела, но, как и следовало ожидать, он выдает отсутствие параметра ‘update =’! каким будет решение

2. Вам нужно посмотреть на GET API, чтобы увидеть, какие поля он будет принимать.

Ответ №2:

Пробовать не стоит, даже если вы сможете, сервер будет проигнорирован, единственный способ отправить параметры в GET — использовать URL.

Посмотрите на объяснение здесь: https://dropbox.tech/developers/limitations-of-the-get-method-in-http

Комментарии:

1. спасибо за ответ, я понимаю, но каков способ выполнения запроса на другой конечной точке? Я попытался использовать post и отправить ему запрос select в виде тела, но, как и следовало ожидать, он выдает отсутствие параметра ‘update =’! каким будет решение