我最近在Commercetools平台上工作,我有这样一个问题。如何通过不完整的名称查找产品或类别等?
例如,如果我在网址中写了这样的文字
https://localhost:8080/cat?catName=G
我想找到包含G
的所有类别。我们如何做到这一点?
答案 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请求,如下所示:
import api
然后,实现中的Java类 {
"name": "category name"
}
看起来像这样:
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;
}
}
。只需通过从commercetools JVM SDK实现CategoryAutoCompleteRequest
接口,可以简化此过程,如下所示:SphereRequest
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