当前位置: 首页 > 知识库问答 >
问题:

IllegalArgumentException:动态查询参数的URL查询字符串使用@query。对于方法

姚晋
2023-03-14

我有以下接口

interface OpenWeatherApi {

    @GET("weather?lat={lat}&lon={lon}&appid=" + Constants.OPEN_WEATHER_API_KEY)
    suspend fun currentWeatherDetails(
        @Path("lat") lat: String,
        @Path("lon") lon: String
    ): Response<CurrentWeatherResponseSchema>

}

我正在使用以下依赖项

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.8.1'

我使用的Base_Url如下所示:

const val BASE_URL = "https://api.openweathermap.org/data/2.5/"

原始url或api调用应该如下所示:

api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key} 

我尝试将@path更改为@query,但仍然得到相同的错误消息

下图是来自邮差的一个测试,看起来很管用:

我只是从postman复制url并在代码中进行必要的更改,我得到的错误代码仍然是相同的

共有1个答案

狄卓君
2023-03-14

替换:

@GET("weather?lat={lat}&lon={lon}&appid=" + Constants.OPEN_WEATHER_API_KEY)

与:

@GET("weather?appid=" + Constants.OPEN_WEATHER_API_KEY)

然后,替换:

    @Path("lat") lat: String,
    @Path("lon") lon: String
    @Query("lat") lat: String,
    @Query("lon") lon: String
 类似资料:
  • Stability: 2 - Stable querystring 模块提供了一些实用工具,用于解析与格式化 URL 查询字符串。它可以通过以下方式被使用: const querystring = require('querystring'); querystring.escape(str) 新增于: v0.1.25 str <string> querystring.escape() 方法对给定

  • 问题内容: 从格式如下的URL查询字符串中获取参数的“较少代码”方法是什么? www.mysite.com/category/subcategory?myqueryhash 输出应为: 我知道这种方法: 问题答案: 包含您要查找的数据。 文件资料 **php.net:$** _SERVER-手册

  • 问题内容: 从Java脚本的路径中删除查询字符串的简便方法是什么?我已经看到了使用window.location.search的Jquery插件。我不能这样做:在我的情况下,URL是从AJAX设置的变量。 问题答案: 一个简单的方法是: 对于那些还希望在不存在querystring的情况下删除哈希(不是原始问题的一部分)的人,需要做更多的工作: 编辑 @caub(最初为@crl)建议了一个更简单的

  • 问题内容: 说我有一个网址 并且我有一个用户输入的查询,例如: 随机词银行 我希望结果是正确编码的URL: 实现此目标的最佳方法是什么?我尝试创建URI / URL对象,但没有一个是正确的。 问题答案: 应该是要走的路。你只需要记住只对单个查询字符串参数名称和/或值进行编码,而不对整个URL 进行编码,请确保对查询字符串参数分隔符和参数名称-值分隔符都不进行编码。 请注意,查询参数中的空格由+而不

  • 假设我有一个URL 并且我有一个用户输入的查询,例如: 随机字500英镑银行$ 我希望结果是一个正确编码的URL: 实现这一点的最佳方法是什么?我尝试了并创建URI/URL对象,但结果都不是很对。

  • 问题内容: 我有一个网址 并且我有一个用户输入的查询,例如: 我希望结果是正确编码的URL: 实现此目标的最佳方法是什么?我尝试创建URI / URL对象,但是没有一个是正确的。 问题答案: 可以使用 。您只需要记住只对单个查询字符串参数名称和/或值进行编码,而不对整个URL 进行编码,请确保对查询字符串参数分隔符&和参数名称-值分隔符都不进行编码=。 请注意,查询参数中的空格由而不是表示,这是合