具有数字值的 JPQL 过滤器字符串在门户应用程序 REST API V1 中抛出 IllegalArgumentException

JPQL filter string with number value throws IllegalArgumentException in portal-app REST API V1

我想通过使用此正文通过 zip(String) 获取客户:

{
  "entity": "demo$Customer",
  "query": "select c from demo$Customer c where c.zip = :zip",
  "params": [
        {
          "name": "zip",
          "value": "12345"
        }
    ]
}

我收到这个错误:

java.lang.IllegalArgumentException: You have attempted to set a value of type class java.math.BigDecimal for parameter zip with expected type of class java.lang.String from query string select c from demo$Customer c where c.zip = :zip.

如果我将值更改为 C12345,我将获得数据。

值是 BigDecimal 且域 属性 是字符串时,我的参数是错误的还是错误?我怎样才能明确地将值标记为字符串?

感谢您的回答。

您必须明确指定参数类型。您的请求将如下所示:

{
  "entity": "demo$Customer",
  "query": "select c from demo$Customer c where c.zip = :zip",
  "params": [
        {
          "name": "zip",
          "value": "123",
          "type": "string"
        }
    ]
}

如果您有特定格式的日期或数字参数,则可以成功处理隐式类型的参数。当您有一个看起来像日期或数字的字符串参数时,则需要显式类型。