错误 "Failed to construct URI for OData request with request path" SAP Java VDM withQueryParameter

Error "Failed to construct URI for OData request with request path" SAP Java VDM withQueryParameter

我已经使用 SAP SDK 3.29.1 在 java 中创建了一个 CAP VDM。 在事件处理程序@On read 中,我想将输入过滤器传递给 VDM。

Es.

@On(event = CdsService.EVENT_READ, entity = "XXXX")
public void readXXX(CdsReadEventContext context) throws ODataException {

final String filter = context.getParameterInfo().getQueryParameter("$filter");
final List<XXXXX> dati = new DefaultXXXService().getAllXXXX().select().withQueryParameter("$filter", filter).executeRequest(dest);

}

当 运行 在日志中查询时,我得到错误: “无法使用请求路径为 OData 请求构造 URI ...” “索引 95 处的查询中存在非法字符。....”

但是路径和过滤器适合调用,你能帮我吗?

在我使用的旧版本sdk中:

FilterExpression filtriFrontEnd =FilterExpressionConverter.convertTo(queryRequest.getQueryExpression());

final List<XXXX> area = new DefaultXXXXService().getAllXXX().filter(new UncheckedFilterExpression<>(filtriFrontEnd)).select().execute(new ErpConfigContext("XXX"));

谢谢。

withQueryParameter 的方法契约明确警告此 API 用法:

Using this function to bypass fluent helper method calls can lead to unsupported response handling. There is no contract on the order or priority of parameters added to the query.

请直接使用filter函数。邮政编码应该有一个实体字段,代码应该类似于:

new DefaultXXXService()
    .getAllXXXX()
    .filter(Entity.POSTAL_CODE.eq("16100"))

如果这在您的用例中不可行,我建议您像以前一样手动构建此过滤器表达式,并按照 Alex 在他的回答中指出的那样对其应用编码。

When run the query in the log i get the error: "Failed to construct URI for OData request with request path ..." "Illegal character in query at index 95. ...."

你能检查以下是否适合你..?

import com.sap.cloud.sdk.datamodel.odata.client.request.ODataUriFactory;

final String filter = context.getParameterInfo().getQueryParameter("$filter");
final String encodedFilter = ODataUriFactory.encodeQuery(filter);
final List<XXXXX> dati = new DefaultXXXService().getAllXXXX().select().withQueryParameter("$filter", encodedFilter ).executeRequest(dest);

请告诉我,因为这可能是一个需要解决的问题。