我有两个查询:
@POST("/auth/login")
suspend fun login(@Body user: LoginUserDto): AuthResponse<TokenDto>
@FormUrlEncoded
@POST("/auth/refresh")
suspend fun refreshToken(@Field("refreshtoken") refreshToken: String): AuthResponse<TokenDto>
第一个工作良好,这意味着baseUrl是OK的。第二个返回HTTP 404 Not Found
。当我查看Chucker拦截器日志时,url是正确的,并且请求中存在refreshToken。当我尝试在vsCode中从request.rest
手动触发它时,像这样:
POST http://localhost:4000/auth/refresh/eyJhbGciOiJIUzI1NiIsInR5...blablabla
…
端点的代码像这样开始(node.js服务器):
app.post('/auth/refresh/:refreshtoken', async (req, res) => {
const refreshToken = req.params.refreshtoken;
// some code
我相信我在我的改造呼叫refreshToken(@Field("refreshtoken") refreshToken: String)
中犯了错误。smb可以帮助如何正确地改造这样的@FormUrlEncoded
请求?
谢谢你的帮助。
@Field用于在Retrofit中发送@FormUrlEncoded请求,该请求隐藏了您的参数,而不附加url以提供安全性。用于POST请求。
@查询参数附加到URL。
如果你使用@Field请求,它会隐藏你的参数,而不是附加url。
如果你使用的是@Query请求,那么你的所有参数都被附加到你的请求中,并且对用户可见。
根据您的api请求,您必须使用上述注释之一。如果api请求接受@FormUrlEncoded数据,请使用@Field,或者如果他们想要附加url,请使用@Query。