我怎样才能做到这一点?这是我正在做的请求。
Error C2526 'GetStaffMap': C linkage function cannot return C++ class 'std::map<int,std::string,std::less<int>,std::allocator<std::pair<const _Kty,_Ty>>>' AmsCppRest c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.h 18
Error C2556 'std::map<int,std::string,std::less<int>,std::allocator<std::pair<const _Kty,_Ty>>> Staffs::GetStaffMap(void)': overloaded function differs only by return type from 'void Staffs::GetStaffMap(void)' AmsCppRest c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.cpp 38
Error C2371 'Staffs::GetStaffMap': redefinition; different basic types AmsCppRest c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.cpp 38
我得到的回应是:
Fuel.get(url)
.timeout(TIMEOUT)
.body(myRequest.parameters!!, Charsets.UTF_8)
.responseString() { _, response, result ->
Log.e("result", "$result")
when (result) {
is Result.Success -> {
completionHandler(result.get(), null)
}
is Result.Failure -> {
Log.e("fail", "${response}")
completionHandler(null, Error(response.responseMessage))
}
}
}
我想将正文消息作为我的错误返回。
答案 0 :(得分:2)
此issue中已提及。您可以使用response.data
接收正文,并返回ByteArray
。因此,代码可能如下所示:
val myBody = String(response.data)
另一种解决方案是禁用HTTP Code validator,可以通过以下方法实现:FuelManager.removeAllResponseInterceptors()
答案 1 :(得分:0)
无论如何我解决了它将消息子串出来。但Fuel是一个受人尊敬的图书馆,所以有可能是另一种更好看的方式。但它的工作是:)
答案 2 :(得分:0)
如果您的代码使用awaitByteArrayResponse
并获得了Result<?, FuelError>>
或FuelError
对象,请尝试以下操作:
val (content, error) = result // Result<?, FuelError>>
val strContent = error.errorData.toString(Charsets.UTF_8)
答案 3 :(得分:0)
我偶然发现了同一问题,并做了以下工作以使错误消息脱离响应正文:
// Body : ({"message":"Not allowed to do this!"})
val errorMessage = Json(String(error.response.data)).obj().getString("message")
不幸的是,我没有看到更优雅的方法,因为在Fuel的源代码中,body
属性被声明为内部属性。