【发布时间】:2015-08-07 04:09:26
【问题描述】:
使用 Retrofit 我可以很好地发送和接收数据,包括日期,但是当我使用 @Multipart 时它停止工作。
这是我发送数据的日志:
Content-Disposition: form-data; name="post_date"
Content-Type: application/json; charset=UTF-8
Content-Length: 26
Content-Transfer-Encoding: binary
"2015-08-06T19:37:14.000Z"
这是我得到的错误:
{"post_date": ["Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]"]}
如果我省略 date_time 字段,所有其他字段都会正确传输。我不太确定我在这里做错了什么,我发送的数据与 DRF 期望的日期格式相匹配,但它似乎不这么认为。
编辑:如果我使用 Postman 并发送 Retrofit 声称要发送的值,它就可以工作。我可以复制并粘贴上面的日期(不带引号)并且提交就好了。
编辑 2:我发现了问题,日志中日期值周围的引号不只是在我的日志中,而是在将值发送到服务器时添加到日期中。那么....如何让 Retrofit 相信日期值不需要额外的引号?
编辑 3:看起来问题是 Gson 在日期被格式化为 JSON 时添加引号,然后 Retrofit 只发送 Gson 提供的值。但是,如果您要发送多部分消息,则不需要这些引号。不确定如何继续,在 Retrofit github 页面上创建了一个问题。我知道 Retrofit 要么在将字符串作为多部分消息的一部分发送之前从字符串中去除引号,要么一开始就从不添加它们,似乎应该对日期使用相同的策略。
【问题讨论】:
-
在我的 js 文件中遇到了同样的问题,但我自己构建了我的 Json 数据并让 Django 处理这个问题。由于格式化是我的唯一原因,我发布格式:
var today = new Date(); var dd = today.getDate(); var mm = today.getMonth()+1; //January is 0! var yyyy = today.getFullYear(); var hh = today.getHours(); var m = today.getMinutes(); var secs = today.getSeconds(); var now = yyyy+"-"+mm+"-"+dd+"T"+hh+":"+m+":"+secs;
标签: datetime django-rest-framework retrofit