Как найти товар или категорию по неполному названию?

Я недавно работаю с платформой Commercetools и у меня такой вопрос. Как мы можем найти продукт или категорию и так далее по неполному названию?

Например, если в моем URL-адресе я написал что-то вроде этого

https://localhost:8080/cat?catName=G

Я хочу найти все категории, которые содержат G . Как мы можем это сделать?

Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
380
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете получить это с помощью запроса категорияАвтозаполнение в GraphQL API. Следующий запрос запрашивает категории, начинающиеся с «привет». Вам нужно указать как минимум два символа, только с одной буквой он не возвращает никакого результата.

{
  categoryAutocomplete(locale: "en", text: "hi") {
    results {
      name(locale: "en")
    }
  }
}

В моем тестовом проекте этот запрос возвращает две категории, в английском названии которых есть термин «подсказка»:

{
  "data": {
    "categoryAutocomplete": {
      "results": [
        {
          "name": "Test duplicate order hint"
        },
        {
          "name": "order hint test"
        }
      ]
    }
  }
}

Это полезно?

Вы смотрели документы JVM SDK: commercetools.github.io/commercetools-jvm-sdk/apidocs/io/sph‌​ere/…

Stefan Meissner 23.05.2019 18:56

Вы можете сделать запрос GraphQL с помощью JVM SDK commercetools следующим образом:

  1. Сначала реализуйте класс Java, представляющий ваш ответ GraphQL. Итак, если один объект результата выглядит так:
    {
      "name": "category name"
    }

Тогда реализующий класс Java CategoryAutoCompleteResult будет выглядеть примерно так:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.sphere.sdk.models.Base;

public class CategoryAutoCompleteResult extends Base {
    private final String name;

    @JsonCreator
    public CategoryAutoCompleteResult(@JsonProperty("name") final String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
  1. Затем реализуйте класс запросов GraphQL CategoryAutoCompleteRequest. Это можно упростить, просто реализовав интерфейс SphereRequest из JVM SDK commercetools следующим образом:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import io.sphere.sdk.client.HttpRequestIntent;
import io.sphere.sdk.client.SphereRequest;
import io.sphere.sdk.http.HttpMethod;
import io.sphere.sdk.http.HttpResponse;
import io.sphere.sdk.json.SphereJsonUtils;
import io.sphere.sdk.models.Base;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;


public class CategoryAutoCompleteRequest extends Base implements SphereRequest<List<CategoryAutoCompleteResult>> {
    private final String queryString;

    CategoryAutoCompleteRequest(final String queryString) {
        this.queryString = queryString;
    }

    public static CategoryAutoCompleteRequest of(@Nonnull final String queryString) {
        return new CategoryAutoCompleteRequest(queryString);
    }

    @Nullable
    @Override
    public List<CategoryAutoCompleteResult> deserialize(final HttpResponse httpResponse) {
        final JsonNode rootJsonNode = SphereJsonUtils.parse(httpResponse.getResponseBody());
        final JsonNode results = rootJsonNode.get("data").get("categoryAutocomplete").get("results");
        return SphereJsonUtils
            .readObject(results, new TypeReference<List<CategoryAutoCompleteResult>>() {
            });
    }

    @Override
    public HttpRequestIntent httpRequestIntent() {
        final String queryBody =
            String.format("{categoryAutocomplete(locale: \"en\", text: \"%s\") {results{name(locale: \"en\")}}}",
                queryString);
        final String graphQlQuery = buildGraphQlQuery(queryBody);


        return HttpRequestIntent.of(HttpMethod.POST, "/graphql", graphQlQuery);
    }

    private static String buildGraphQlQuery(@Nonnull final String queryBody) {
        return String.format("{ \"query\": \"%s\"}", queryBody.replace("\"", "\\\""));
    }
}

  1. Затем последним шагом будет выполнение фактического запроса. Предполагая, что у вас уже есть настройка SphereClient. Выполнение запроса будет выглядеть следующим образом:
final List<CategoryAutoCompleteResult> results = sphereClient
          .execute(CategoryAutoCompleteRequest.of("myIncompleteCatName")).toCompletableFuture().join();

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