【发布时间】:2018-08-09 07:51:06
【问题描述】:
我有 REST POST 调用创建订单为Observable<OrderResponse>,当订单创建调用成功时一切都很好,但是服务器返回错误我得到com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $,因为 Gson 不知道如何处理与我的字段不同的 json响应模型
服务器错误响应:
[{
"code": 99,
"message": "Please check your request"
}]
订单响应
data class OrderResponse(
@Expose
var orderId: String,
@Expose
var redirectUrl: String,
@Expose
var validUntil: Long
)
RxJava 订阅
repository.requestCreateNewOrder(newOrder)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Observer<OrderResponse> {
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
compositeDisposable.add(d)
}
override fun onNext(t: OrderResponse) {
}
override fun onError(t: Throwable) {
//HERE I GET JsonSyntaxException
}
})
改装服务
interface OrderService {
@Headers(
"Content-Type: application/x-www-form-urlencoded ",
"Connection: Keep-Alive",
"Accept-Encoding: application/json",
"User-Agent: Fiddler"
)
@FormUrlEncoded
@POST("/createOrder")
fun createOrder(@Field("orderId") orderId: String,
@Field("payCurrency") payCurrency: String,
@Field("payAmount") payAmount: Double,
@Header("Content-Length") length: Int): Observable<OrderResponse>}
任何人对如何通过改造或错误模型了解如何处理有任何建议
【问题讨论】:
-
分享您的代码以澄清问题。
-
请粘贴您的模型类 OrderResponse
-
从 API 分享您的 json 响应。
-
已分享[{ "code": 99, "message": "请检查您的请求" }]
-
服务器响应在大多数情况下是单一的/可完成的。你不需要 Observable。
标签: android kotlin retrofit2 rx-java2 gson