避免java中http调用的URI验证

避免java中http调用的URI验证,java,spring,url,uri,Java,Spring,Url,Uri,我有一个http调用,其中查询参数应该包含JSON,其符号为{}[]未编码 Url示例: http://server.com?queryParam={%22address1%22%3A%2277+tehama%22%2C%} 在这种情况下,{}应该在不编码的情况下传递 我知道,根据URL编码参考,这个符号应该被编码,但它是第三方API,不能以任何方式更改 到目前为止,我已尝试通过以下方式拨打此类电话: SpringRestTemplate Springorg.springframework.w

我有一个http调用,其中查询参数应该包含JSON,其符号为
{
}
[
]
未编码

Url示例:

http://server.com?queryParam={%22address1%22%3A%2277+tehama%22%2C%}

在这种情况下,
{
}
应该在不编码的情况下传递

我知道,根据URL编码参考,这个符号应该被编码,但它是第三方API,不能以任何方式更改

到目前为止,我已尝试通过以下方式拨打此类电话:

  • Spring
    RestTemplate
  • Spring
    org.springframework.web.reactive.function.client.WebClient
  • Java9
    java.net.http.HttpClient
所有这些客户端都有URI验证,不允许进行此类调用。 Spring客户端将代码< > {*} /COD>作为参数名,并以异常失败,java <代码> HTTPcli客< /C> >失败,代码< java.郎.ILLCALL AguMUMutExtExc:查询< /代码>中的非法字符.< /P>
有没有一种方法可以禁用上述客户端或其他http客户端(可能是低级别)的验证,这些客户端将允许此类调用?

找到了一种通过
java.net.URL

代码示例:

final URL url = new URL("http://server.com?queryParam={%22address1%22%3A%2277+tehama%22%2C%}");
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");

final Response response;
try (InputStream inputStream = connection.getInputStream()) {
   response = objectMapper.readValue(inputStream, Response.class);
} catch (final Exception e) {
   log.error("Error when calling API", e);
}

JSON作为查询参数,URL未编码。。在我看来,它甚至不是一个API,但你不能避免编码。如果您需要将“{”作为第一个字符发送,请尝试使用%7B和%7D来关闭括号。呼叫的接收者将接收到已解码的内容