Я использую Retrofit2 , и я застрял в проблеме.Я написал простую сущность для тела:
data class DateRequest(
@JsonAdapter(RetrofitDateSerializer::class)
@SerializedName("date") @Expose val date: OffsetDateTime)
и написал для нее собственный сериализатор:
class RetrofitDateSerializer : JsonSerializer<OffsetDateTime> {
override fun serialize(
srcDate: OffsetDateTime?,
typeOfSrc: Type?,
context: JsonSerializationContext?
): JsonElement? {
val formatted = DateTimeUtil.convertFromDateTime(srcDate!!)
return JsonPrimitive(formatted)
}}
DateTimeUtil :
fun convertFromDateTime(dateTime: OffsetDateTime): String {
val formatter = formatDateTime()
return formatter.format(dateTime)
}
fun formatDateTime(): DateTimeFormatter {
return DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss").withLocale(Locale.US)
}
и в теле запроса как-то появляется это:
)]}'{"date": "2018-12-07 06:00:00"}
Как этот ")]} '" может быть прикреплен перед моим " date " json в запросе?
@POST("changecleaning/{userId}/{cleaningId}/{status}")
fun changeCleaning(
@Path("userId") userId: Long,
@Path("cleaningId") cleaningId: Long,
@Path("status") status: Int,
@Body date: DateRequest
): Maybe<Status>
Я обнаружил только то, что JsonWriter совершает магию в buffer.readByteString () хранит поврежденное тело.
GsonRequestBodyConverter :
@Override public RequestBody convert(T value) throws IOException {
Buffer buffer = new Buffer();
Writer writer = new OutputStreamWriter(buffer.outputStream(), UTF_8);
JsonWriter jsonWriter = gson.newJsonWriter(writer);
adapter.write(jsonWriter, value);
jsonWriter.close();
return RequestBody.create(MEDIA_TYPE, buffer.readByteString());
}