0
我最近轉而使用Spring來使用由ServiceNow託管的REST API調用。Spring的UriComponentsBuilder.queryParam問題
我建設我的URI如下:
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl.toString());
logger.info("URI before Query Param: " + builder.build().encode().toUri());
builder.queryParam("sysparm_limit", "2000000");
builder.queryParam("sysparm_offset", "0");
builder.queryParam("sysparm_exclude_reference_link", "true");
//this line is the issue because there is a = sign here
builder.queryParam("sysparm_query=user_name", snUser.getUser_name());
logger.info("URI after Query Param: " + builder.build().encode().toUri());
這段代碼的輸出是:
INFO: URI before Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user
INFO: URI after Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user?sysparm_limit=2000000&sysparm_offset=0&sysparm_exclude_reference_link=true&sysparm_query%3Duser_name=AX0011
問題是與最後builder.queryParam。我得到的輸出,因爲這:
sysparm_query%3Duser_name=AX0011
,但我要的是:
sysparm_query=user_name=AX0011
,最終使最終的URI是這樣的:
INFO: URI after Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user?sysparm_limit=2000000&sysparm_offset=0&sysparm_exclude_reference_link=true&sysparm_query=user_name=Z001NR6
所以,我想替換,
builder.queryParam("sysparm_query=user_name", snUser.getUser_name());
由:
builder.query("sysparm_query=user_name=" + snUser.getUser_name());
從而改變從原始輸出:
INFO: URI after Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user?sysparm_limit=2000000&sysparm_offset=0&sysparm_exclude_reference_link=true&sysparm_query%3Duser_name=Z001NR6
到:
INFO: URI after Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user?sysparm_limit=2000000&sysparm_offset=0&sysparm_exclude_reference_link=true&sysparm_query=user_name%3DZ001NR6
通知如何sysparm_query%3Duser_name = Z001NR6改爲sysparm_query = USER_NAME%3DZ001NR6
是否anyw ay在輸出中看到a =而不是%3d?
我知道查詢看起來很奇怪,但是這是怎麼回事。在.query(「query = username = JOE」)JOE的值被參數化,我可以通過snUser.getUser_name()來替換。我知道我可以創建一個字符串連接來實現這一點,但UriComponentBuilder中是否有默認方法? –
不,沒有可用的默認方法。但是繼續使用字符串連接(java編譯器會優化這個反正到'StringBuilder') – fateddy
我加入了你所建議的改變,它並沒有產生所需的效果。有什麼我在這裏失蹤?我修改了原文,以反映它。 –