我们如何通过不完整的名称查找产品或类别?

时间:2019-05-22 14:36:05

标签: java commercetools

我最近在Commercetools平台上工作,我有这样一个问题。如何通过不完整的名称查找产品或类别等?

例如,如果我在网址中写了这样的文字

  

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

我想找到包含G的所有类别。我们如何做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以通过GraphQL API上的 categoryAutoComplete 查询来获取此信息。以下查询要求以“ hi”开头的类别。您至少需要提供两个字符,只有一个字母,不会返回任何结果。

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

在我的测试项目中,此查询返回两个类别,其英文名称中包含术语“提示”:

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

这有帮助吗?

答案 1 :(得分:0)

您可以使用commercetools JVM SDK发出GraphQL请求,如下所示:

  1. 首先实现代表您的GraphQL响应的Java类。因此,如果一个结果对象看起来像:
import api

然后,实现中的Java类 { "name": "category name" } 看起来像这样:

CategoryAutoCompleteResult
  1. 然后实现GraphQL请求类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; } } 。只需通过从commercetools JVM SDK实现CategoryAutoCompleteRequest接口,可以简化此过程,如下所示:
SphereRequest
  1. 然后,最后一步是执行实际请求。假设您已经有一个设置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("\"", "\\\"")); } } 。执行请求将如下所示:
SphereClient