我正在尝试使用Retrofit 1.x进行API调用:
@POST("/test?api-version=1.0")
void createMyStuff(
@Header("X-Signature") String authorization,
@Query(value="nickname") String nickname,
@Query("language") String language,
Callback<MyAPIResponse> cb);
问题是:昵称中可以包含空格。 所以,在拨打电话之前,如果昵称是“John Doe”(两个空格),我会替换它中的空格,并在API调用中发送它:“John%20%20Doe”。
400失败请求失败。
errorResponse对象中报告的URL是: https://.com/foo/test?nickname = john%2520%2520doe&amp; language = en-US
请注意%20被%2520替换
我调查的内容:没有明确的答案。有人在SO中建议使用FunName(value =“apiname”,encodeValue = true) 但是encodeValue没有解析。
我也尝试使用UTF-8进行编码,但它不起作用。我不确定URL编码,因为这不是真正的URL,只是它的一部分。
感谢任何帮助。
答案 0 :(得分:0)
实际上%25是%的编码所以当你输入%20时它将%编码为%25并且20保持相同。所以你必须在@Query
参数
@Query(value="nickname",encodeValue = false) String nickname
现在你可以用%20调用它,它可以正常工作
createMyStuff("Auth","John%20%20Doe","lang",new Callback<MyResponse>{....});
答案 1 :(得分:0)
在Retrofit2中,参数名称和值默认为URL编码。您需要添加/Users/nimrodshai/Documents/Projects/WeatherJS/node_modules/firebaseui/dist/npm.js:30
componentHandler["register"]=componentHandler.register;componentHandler["downgradeElements"]=componentHandler.downgradeElements;window.componentHandler=componentHandler;window["componentHandler"]=componentHandler;
^
ReferenceError: window is not defined
at /Users/nimrodshai/Documents/Projects/WeatherJS/node_modules/firebaseui/dist/npm.js:30:129
at Object.<anonymous> (/Users/nimrodshai/Documents/Projects/WeatherJS/node_modules/firebaseui/dist/npm.js:420:460)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object.<anonymous> (/Users/nimrodshai/Documents/Projects/WeatherJS/JS/server.js:8:18)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
才能更改此行为。
encoded = true