当路径具有另一个协议名称时,在Retrofit2上格式错误的URL异常

时间:2016-11-29 22:58:47

标签: retrofit retrofit2

我正在进行以下调用

@Headers("Content-Type:application/json")    
@POST("{uri}")
Call<SolarWindsQueryResult<Object>> updateTestFlagForNode(@Path(value="uri",encoded = true/false) String Uri,@Body RunTestCases runTestCases);

所以我想发布的网址是

  

https://hostname:port/SolarWinds/InformationService/v3/Json/swis://solarwinds-01./Orion/Orion.Nodes/NodeID=1/CustomProperties

对此方法的调用如下

solarWindsService.updateTestFlagForNode("swis://solarwinds-01./Orion/Orion.Nodes/NodeID=1/CustomProperties",new RunTestCases("true")).execute()

对于编码的true和false,此调用均失败。我得到以下异常

  

java.lang.IllegalArgumentException:格式错误的URL。基数:https://10.50.1.71:17778/SolarWinds/InformationService/v3/Json/,相对:swis://solarwinds-01./Orion/Orion.Nodes/NodeID=1/CustomProperties/CustomProperties

在改造代码中,我看到builder.parse(HttpUrl base,String input)返回UNSUPPORTED_SCHEME,因为它在输入字符串中查找HTTP或HTTPS,而HttpUrl返回null。似乎Retrofit不支持这种网址或者我做错了。需要帮忙。仅供参考,它适用于chrome

我可以通过使用@Url注释绕过该代码,但如果我可以使用@Path仍然执行上述请求,那将会很好。

1 个答案:

答案 0 :(得分:2)

okhttp仅支持http / https。在尝试找出如何将其与基础合并并且非http方案导致您遇到麻烦之前,它将您的路径解析为完整URL。您可以通过在前面添加对当前路径的相对引用来使其看起来更像path -

@POST("./{uri}")

或者你可以在通话中这样做 -

solarWindsService.updateTestFlagForNode("./swis://solarwinds-01./Orion/Orion.Nodes/NodeID=1/CustomProperties",new RunTestCases("true")).execute()