简体   繁体   中英

Retrofit - Error 400

I'm having issues trying to upload images and other details to my server using the below code:

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);

It always return error 400 due to SyntaxError: Unexpected token <br>;

However, if I send only the details as RequestBody it works.

I need to construct an array of images to upload as defined in my server; thus, I'm using it:

    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;
}

After that I make the call that is always returning 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));
    }
});

Any hint on why it is not working?

Thank you,

You are using @Header annotation with Content-Type: application/json, but you need multipart POST request which uses different content type. Try to remove @Header annotation and replace it with @Multipart.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM