关于向后台上传数据时报400的问题

关于http返回码

在做项目的时候,我们关心的不是错误码,而是请求成功后的返回码。很少去关注错误的时候返回什么,很多时候也是等返回后再去考虑错误码的问题。

我其实在工作中,也只关心操作成功与否。可是今天这个次情况就不一样了。居然给我返回400。

找了很久问题,终于找到了问题的根源:因为后台用的是tomcat,它对特殊字符做了拦截。

为什么出现了这个特殊字符呢?那这个特殊字符又是什么呢?因为我向后台传了json字符串。我传的是json对象的数组。就是说[]中包含了{}。

怎么解决这个特殊字符问题

1 采用base64将字符串编码,然后后台按同样的方式解码。

理论上这个方法是可行的。这样就把特殊字符串编码成了字节码。当后台接收到后做相应的解码操作就可以了。

但是,我放弃了这种方式的选择。因为这样前后端都需要做代码的修改。

2 用RequestBody的方式将数据传到后台

这个方式就是将数据放在Body中以form-data的形式放入数据。打个比方,后台需要的数据格式是:key:value 形式。value是json的格式。这个时候其实就是map的格式。

2cf4efb232b4312c49413c7bdbab211c.png

我的网络请求用的是:Retrofit

接口形式:

@Multipart
@POST("/yourpath")
Observable<Object> fun(
        @PartMap Map<String, RequestBody> requestBodyMap);

这个就是应用层中,最后执行的接口。那这个map怎么构建呢?

Map<String, RequestBody> requestBodyMap = new HashMap<>();
        RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), value);
        requestBodyMap.put("key", requestBody);

就这样,就解决了这个问题,这样的后,后台不用改代码,问题都由前端来处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值