关于http返回码
在做项目的时候,我们关心的不是错误码,而是请求成功后的返回码。很少去关注错误的时候返回什么,很多时候也是等返回后再去考虑错误码的问题。
我其实在工作中,也只关心操作成功与否。可是今天这个次情况就不一样了。居然给我返回400。
找了很久问题,终于找到了问题的根源:因为后台用的是tomcat,它对特殊字符做了拦截。
为什么出现了这个特殊字符呢?那这个特殊字符又是什么呢?因为我向后台传了json字符串。我传的是json对象的数组。就是说[]中包含了{}。
怎么解决这个特殊字符问题
1 采用base64将字符串编码,然后后台按同样的方式解码。
理论上这个方法是可行的。这样就把特殊字符串编码成了字节码。当后台接收到后做相应的解码操作就可以了。
但是,我放弃了这种方式的选择。因为这样前后端都需要做代码的修改。
2 用RequestBody的方式将数据传到后台
这个方式就是将数据放在Body中以form-data的形式放入数据。打个比方,后台需要的数据格式是:key:value 形式。value是json的格式。这个时候其实就是map的格式。
我的网络请求用的是: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);
就这样,就解决了这个问题,这样的后,后台不用改代码,问题都由前端来处理。