改造 - 错误400

时间:2017-06-29 16:03:27

标签: android retrofit2

我在尝试使用以下代码将图片和其他详细信息上传到我的服务器时遇到问题:

public static final String APP_JSON = "Content-Type: application/json";

@Multipart
@Headers({ApiClient.APP_JSON})
@POST("relatorio/{token}")
Call<JsonObject> uploadJson(@Path("token") String token, @Part("json") JsonObject auditoria, @Part List<MultipartBody.Part> files);

始终返回error 400 due to SyntaxError: Unexpected token <br>;

但是,如果我只发送详细信息作为RequestBody,它就可以了。

我需要按照我的服务器中的定义构建一个要上传的图像数组;因此,我正在使用它:

    private List<MultipartBody.Part> prepare(){
    Set<String> keys = JsonFormFragmentPresenter.imagesList.keySet();
    List<MultipartBody.Part> parts = new ArrayList<>();

    for(String k : keys){
        for(String path : JsonFormFragmentPresenter.imagesList.get(k)){
            if(!path.equals(null) && !path.equals("")){
                File image = new File(path);

                RequestBody requestFile = RequestBody.create(
                        MediaType.parse("multipart/form-data"), image
                );

                Log.e("Test", (requestFile == null) + "");
                parts.add(MultipartBody.Part.createFormData("imagens", image.getName(), requestFile));
            }
        }
    }

    JsonFormFragmentPresenter.imagesList.clear();
    return parts;
}

之后,我拨打的电话总是返回400:

Call<JsonObject> call = ApiClient.get().uploadJson(details.get(KEY_TOKEN), json, prepare());
call.enqueue(new Callback<JsonObject>() {
    @Override
    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
        Log.e("Status", new Gson().toJson(response));
    }

    @Override
    public void onFailure(Call<JsonObject> call, Throwable t) {
        Log.e("Status", "Faild");
        Log.e("UPDATErr", new Gson().toJson(t));
    }
});

有关为什么它不起作用的任何提示?

谢谢,

1 个答案:

答案 0 :(得分:0)

您正在使用Content-Type:application / json的@Header注释,但您需要使用不同内容类型的多部分POST请求。尝试删除@Header注释并将其替换为@Multipart。