You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP cURL调用REST接口报searchColsCriteria字段不识别错误

解决REST API调用中searchColsCriteria字段不被识别的问题

问题场景

需要调用REST服务器,预期传入的JSON参数格式如下:

{"expand":"all",
"offset":0,
"limit":100,
"searchColsCriteria":
[
{"value":"577","column":"lookupValues_contextdept","operation":"="},
{"value":"0","column":"snapshot","operation":"="},
{"value":"0","column":"withdrawn","operation":"="},
{"value":"2019","column":"lookupValues_year","operation":">="},
{"value":"2021","column":"lookupValues_year","operation":"<="}
]
}

对应的PHP cURL调用代码如下:

$data =  array(
    'offset'              => 0,
    'limit'               => 100,
    'expand'              => 'none',
    'searchColsCriteria'  => '[{\"value\":\"577\",\"column\":\"lookupValues_contextdept\",\"operation\":\"=\"},{\"value\":\"0\",\"column\":\"snapshot\",\"operation\":\"=\"},{\"value\":\"0\",\"column\":\"withdrawn\",\"operation\":\"=\"},{\"value\":\"2019\",\"column\":\"lookupValues_year\",\"operation\":\">=\"},{\"value\":\"2021\",\"column\":\"lookupValues_year\",\"operation\":\"<=\"}]',
);

$payload = json_encode($data);
// Interrogo il webserevice con CURL passando i dati in POST
$ch = curl_init('https://iris.univpm.it/rest/api/v1/public/items/search');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "restadmin:XXXXXXXXX");
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

// Setto HTTP Header per la POST request 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'cache-control: no-cache',
    'Content-Length: ' . strlen($payload))
); 
// Submit the POST request
$result = curl_exec($ch);
// Risposta del server
/* per debug */
print_r($result);
exit;
curl_close($ch);

服务器返回错误:

Unrecognized field "searchColsCriteria" (class it.cineca.dspace4.rest.search.SearchSolrRestDTO), not marked as ignorable (5 known properties: "expand", "offset", "solrQuery", "limit", "sortingColsCriteria"]) at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 63] (through reference chain: it.cineca.dspace4.rest.search.SearchSolrRestDTO["searchColsCriteria"])


错误原因

  1. 参数结构错误:searchColsCriteria被定义为手动拼接的转义JSON字符串,而非PHP多维数组。json_encode处理后,该字段会被序列化为带引号的JSON字符串,而非服务器期望的JSON数组结构。
  2. 字段名称不匹配:当前服务器API的SearchSolrRestDTO类中不存在searchColsCriteria字段,仅支持expand、offset、solrQuery、limit、sortingColsCriteria这几个字段,你提供的预期参数格式可能与API版本不兼容。

解决步骤

1. 修正参数数组结构

把searchColsCriteria改为PHP多维数组,让json_encode自动生成正确的JSON数组:

$data = array(
    'offset' => 0,
    'limit' => 100,
    'expand' => 'all', // 若需要全量展开,建议和预期参数保持一致,从'none'改为'all'
    'searchColsCriteria' => array(
        array(
            'value' => '577',
            'column' => 'lookupValues_contextdept',
            'operation' => '='
        ),
        array(
            'value' => '0',
            'column' => 'snapshot',
            'operation' => '='
        ),
        array(
            'value' => '0',
            'column' => 'withdrawn',
            'operation' => '='
        ),
        array(
            'value' => '2019',
            'column' => 'lookupValues_year',
            'operation' => '>='
        ),
        array(
            'value' => '2021',
            'column' => 'lookupValues_year',
            'operation' => '<='
        )
    )
);

2. 匹配服务器要求的字段名

由于服务器不识别searchColsCriteria,需确认API文档中的正确字段名。根据错误信息中的solrQuery,这是Solr搜索常用的字段,可将条件转换为Solr查询语法传入:

$data = array(
    'offset' => 0,
    'limit' => 100,
    'expand' => 'all',
    'solrQuery' => 'lookupValues_contextdept:577 AND snapshot:0 AND withdrawn:0 AND lookupValues_year:[2019 TO 2021]'
);

3. 验证请求格式

修正后可通过var_dump($payload)查看生成的JSON是否符合要求,确认结构无误后再发送请求。

4. 优化cURL代码(可选)

cURL会自动处理Content-Length,可手动移除该Header以避免计算错误:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'cache-control: no-cache'
));

内容的提问来源于stack exchange,提问作者Andrea Cappelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:01:08