簡體   English   中英

如何使用Spring RestTemplate將JSON作為參數發送到url中?

[英]How to send JSON as a parameter in url using Spring RestTemplate?

我試圖實現與此相同的事情: 如何使用Spring RestTemplate表示為JSON的查詢參數? ,在restTemplate.exchange() JSON字符串作為URL參數發送。

接受的答案提到將JSON對象作為請求參數發送通常不是一個好主意,因為您可能會遇到JSON中的大括號問題。 這正是我嘗試對API進行GET調用時發生的事情。 由於這是來自另一個系統的API,我不能要求他們更改格式,並且必須調用GET端點,將JSON作為參數傳遞。 我怎樣才能在restTemplate.exchange()調用中實現這一點?

注意:提到的相關問題沒有指導如何克服這個問題,我沒有足夠的聲譽來評論它,以詢問作者的答案。

回答我自己的問題。 雖然在query / url參數中傳遞這樣的JSON是個壞主意,但是這里有一個解決方法: https//jira.spring.io/browse/SPR-9220?focusCommentId = 76760&page = com.atlassian。 jira.plugin.system.issuetabpanels:comment-tabpanel#comment-76760
在此鏈接失效的情況下復制代碼:

String url = "http://localhost:8983/solr/select?wt=json&indent=true&fl=*&q=*:*&fq={!geofilt}&sfield=venue_location&pt=28.0674,-80.5595&d=25";
URI uri = UriComponentsBuilder.fromUriString(url).build().encode().toUri();

System.out.println(uri);
// http://localhost:8983/solr/select?wt=json&indent=true&fl=*&q=*:*&fq=%7B!geofilt%7D&sfield=venue_location&pt=28.0674,-80.5595&d=25

基本上,不是將具有JSON查詢/ url參數的url作為字符串傳遞,而是將其作為URI傳遞。 然后像以前一樣調用exchange方法,但使用URI而不是String:

restTemplate.exchange(uri, HttpMethod.GET, requestEntity, String.class)

您可以使用URLEncoder類在exchange方法中對URL進行編碼,例如:

String url = "http://www.yoursite.com/api?param={\"some_key\":\"some_value\"}";
System.out.println(URLEncoder.encode(url, StandardCharsets.UTF_8.name()));

這將對字符(如大括號和雙引號)進行編碼,然后服務器將其解碼回json

如果這是第三方API,並且您無法在后端控制或更改JSON處理 - 則沒有解決方案。 即使您使用URLEncoder進行編碼 - 也無法保證API后端能夠正確處理此類請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM