gpt4 book ai didi

java - RestTemplate:不热心的&符号编码

转载 作者:行者123 更新时间:2023-12-02 20:43:37 27 4
gpt4 key购买 nike

我们有这样的代码,它使用 OData 来指定资源(为简单起见,在此处使用公司代码进行硬编码):

String uri = "[my_endpoint]/companyprofiles.read?$filter=company/any(company:company/id eq 'C&06')";
HttpHeaders headers = getHeaders();
HttpEntity<?> requestEntity = new HttpEntity<Object>(null, headers);
ResponseEntity<CompanyProfile> respEntity =
getApiRestTemplate().exchange(uri, HttpMethod.GET, requestEntity, CompanyProfile.class);

由于公司 ID 中存在“&”符号,此操作失败。它适用于没有 & 符号的公司 ID;例如,使用“ABCD”会按预期返回资源。使用Postman,如果我调用就会返回资源

[my_endpoint]/companyprofiles.read?$filter=company/any(company:company/id eq 'C%2606')

因此,exchange 会进行一些编码(例如 %20 之间的空格),但不会对 & 符号进行编码,因为它们通常保留用于分隔 URI 变量。

如何强制对&符号进行编码?或者我可以自己进行&符号替换并强制跳过百分号符号的编码吗?

编辑:这是有效的最终答案:

String url = "http://[my_endpoint]/companyprofiles.read?$"
+"filter=company/any(company:company/id eq '{param1}')";
Map<String, String> uriVariables = new HashMap<>();
uriVariables.put("param1", "C&06");
getApiRestTemplate().exchange(url, HttpMethod.GET, requestEntity, CompanyProfile.class, uriVariables);

最佳答案

尝试向 overloaded exchange method 提供参数映射建立URI

基本上是这样的:

String url = "http://{path}?/$filter={param1} ... ";
Map<String, String> uriVariables = new HashMap<>();
uriVariables.put("path", "[my_endpoint]/companyprofiles.read");
uriVariables.put("param1", "company/any(company:company/id eq 'C&06')");
getApiRestTemplate().exchange(uri, HttpMethod.GET, requestEntity, CompanyProfile.class, uriVariables);

关于java - RestTemplate:不热心的&符号编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45256229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com