Solr 9.3.1无法正确返回JSONP响应问题求助
Solr 9.x升级后JSONP回调失效问题解决
问题现象
将Solr从v7版本升级至9.3.1后,使用wt=json&json.wrf=ng_jsonp_callback_0请求时,仅返回普通JSON响应,未用指定回调函数包裹;但使用wt=python&json.wrf=ng_jsonp_callback_0可正常得到回调包裹的响应。相同请求在Solr 7.x中可正常生成JSON格式的JSONP响应。
不同版本返回示例:
- Solr 9.3.0
wt=json&json.wrf=ng_jsonp_callback_0返回:
{ "responseHeader":{ "status":0, "QTime":9, "params":{
- Solr 9.3.0
wt=python&json.wrf=ng_jsonp_callback_0返回:
ng_jsonp_callback_0({ 'responseHeader':{ 'status':0, 'QTime':28,
- Solr 7.3.1
wt=json&json.wrf=ng_jsonp_callback_0返回:
ng_jsonp_callback_0({ "responseHeader":{ "status":400, "QTime":206, "params":{
原因分析
Solr 9.x对JSONResponseWriter的JSONP支持默认关闭,而旧版本(如7.x)默认开启。python响应处理器仍默认支持callback参数,因此能正常生成包裹响应。
解决方法
方法1:启用JSON响应处理器的JSONP支持
编辑核心的solrconfig.xml,找到JSONResponseWriter的配置段,添加enableJsonp参数并设为true:
<queryResponseWriter name="json" class="solr.JSONResponseWriter"> <str name="enableJsonp">true</str> </queryResponseWriter>
保存配置后,重启Solr核心或节点,重新发起wt=json&json.wrf=ng_jsonp_callback_0请求即可得到包裹后的JSON响应。
方法2:使用专门的JSONP响应处理器
Solr 9.x提供了独立的jsonp响应处理器,直接将请求参数改为wt=jsonp&json.wrf=ng_jsonp_callback_0,无需修改配置即可生成标准JSON格式的JSONP包裹响应。
内容的提问来源于stack exchange,提问作者iscChris
相关产品推荐
相关产品推荐

