我试图在onFailure(ReformationError error)中获取错误响应正文,但获取的是null。
我正在使用标题“Accept:text/plain”(接受:text/plain)(接收请求)和“response”(响应),如果我设置日志级别,则可以将正文视为文本。完整。此外,<代码>错误。getResponse()。getStatus()为我提供正确的状态代码。
但是当我执行error.getbody()
或error.getResponse.getbody()
时,它返回null
。在error
中,我看到成功类型
是java.lang.String
,所以我假设它应该给我String
,但是error.get原因()
显示了我
com.google.gson.JsonSyntaException:com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第1行第6列路径$接受格式错误的JSON
此外,<代码>错误。getKind()是转换,代表
/**对正文进行(反)序列化时引发异常*/
但我希望得到的是HTTP
问题是,当所有标题都使用文本/纯文本,并且成功类型是字符串时,为什么它会尝试转换为JSON?我需要以纯文本的形式得到回复。
代码段:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(url)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(new CustomOkHttpClient())
.setRequestInterceptor(new TransactionsRequestInterceptor())
.build();
TransactionsRestClient httpClient = restAdapter.create(TransactionsRestClient.class);
httpClient.createNewTransaction(request, new retrofit.Callback<String>() {
@Override
public void success(String transactionId, Response response) {
}
@Override
public void failure(RetrofitError error) {
// error.getBody() is null
}
}
public interface TransactionsRestClient {
@POST("/transactions")
void createNewTransaction(@Body TransactionRequest request, Callback<String> transactionId);
}
public class TransactionsRequestInterceptor implements RequestInterceptor {
@Override
public void intercept(RequestFacade request) {
request.addHeader(HOST, host);
request.addHeader(TOKEN, token);
request.addHeader(ACCEPT, TEXT);
request.addHeader(CONTENT_TYPE, JSON);
}
记录的请求/响应:
---> HTTP POST $url
Host: $host
Accept: text/plain
Content-Type: application/json
Content-Length: 133
$request_body
---> END HTTP (133-byte body)
<--- HTTP 202 $url //202 is expected
Access-Control-Allow-Origin:
Content-Type: text/plain
Date: Wed, 20 May 2015 16:08:46 GMT
Server: spray-can/1.3.1
Content-Length: 50
Connection: keep-alive
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1432138139875
OkHttp-Received-Millis: 1432138140004
The record for test10 is not currently authorized. // this is body I have to get
<--- END HTTP (50-byte body)
谢谢。
在您的代码中new RestAdapter. Builder()
您没有指定Converter(setConverter()
)。
查看Retrofit代码,更具体地说,在RestAdapter和Platform中,我检查了如果您不指定转换器,它将默认使用GSON:
@Override Converter defaultConverter() {
return new GsonConverter(new Gson());
}
我认为解决方案是创建一个自定义转换器(扩展转换器类),而不对响应执行任何操作,只返回原始字符串。
下面是一个如何创建自己的转换器的示例。
默认情况下,Retrofit将响应读取为JSON并自动解析它。您必须更改它的默认行为。
这篇博文可能会有所帮助,并建议您将String响应设置为:
new String(((TypedByteArray) response.getBody()).getBytes());
我正在测试改进,以与凌空比较,我很难得到我的请求的回应。例如,我做这样的事情: 它工作了,对象< code>toto被设置,但是出于测试目的,我还想显示服务器返回的JSON响应。 所以我正试图从读取,这是一个。不幸的是,我总是得到一个了。 我尝试使用Retrofit中的Utils类,但我得到了相同的错误。
问题内容: jQuery的AJAX错误函数具有以下参数: 跨浏览器获取响应主体的最佳方法是什么? 这行得通吗(可靠地在所有浏览器中)? 问题答案: 有一个隐藏的函数可以从XHR等距提取数据: 如果您将其作为第二个参数传递,它将把响应视为JSON字符串。 请注意,由于没有响应(例如网络问题),您可能会收到错误消息。确保您也涵盖了这种情况。另外,我相信(不确定)如果服务器返回或状态,则jQuery会调
虽然,如果我将链接插入浏览器,我将得到json格式。 这就是请求的工作结果 `
问题内容: 在Java中,当HTTP结果为404范围时,此代码将引发异常: 就我而言,我碰巧知道内容是404,但无论如何我还是想阅读响应的内容。 (在我的实际情况下,响应代码为403,但是响应的主体说明了拒绝的原因,我希望向用户显示该原因。) 如何访问响应正文? 问题答案: 这是错误报告(关闭,无法修复,不是错误)。 他们的建议是这样编码:
这是我的服务器响应; 我的服务器响应在这里,它返回一些参数和一些常量的Json数组格式的值…
问题内容: 我正在向我的jQuery发送错误响应。但是,我无法获得响应文本(在下面的示例中,这将成为 “去海滩” ) jQuery唯一说的是“错误”。 有关详细信息,请参见以下示例: 的PHP jQuery的 现在我的结果是: 日志: 警报: 无法执行,因为:错误 有任何想法吗? 问题答案: 尝试: