Дооснащение Внутренняя ошибка сервера при использовании multipart - PullRequest
0 голосов
/ 18 января 2020

в моем приложении я должен отправить фотографию на сервер, и сервер выдаст trans_id в ответе, но у меня есть 500 internal server error. Я пытался с почтальоном, и все в порядке. Мой модифицированный интерфейс:

@Headers("Content-Type: application/json")
@Multipart
@POST("photo-mekanik")
Call<PhotoMekanik> getPhotoMekanik(@Part MultipartBody.Part mekanik,
                                   @Part("machineid") RequestBody machineid,
                                   @Header("Authorization") String authorization);

Основываясь на некоторых ответах по SO, я попытался добавить аннотацию @FormUrlEncoded, но Multipart и @FormUrlEncoded нельзя использовать вместе. В моем ретривере у меня есть:

public void sendPhotoMekanik(Callback<PhotoMekanik> photoMekanikCallback, MultipartBody.Part photoMekanik, RequestBody machineid, String authorization) {
        Call<PhotoMekanik> photoMekanikCall = service.getPhotoMekanik(photoMekanik, machineid, authorization);
        photoMekanikCall.enqueue(photoMekanikCallback);

, и мой обратный вызов для модификации:

private void  UploadPhotoMekanik() {
        SharedPreferences editor = getSharedPreferences(MY_PREFERENCE, MODE_PRIVATE);
        String token = editor.getString("token", "");

        Intent intent = getIntent();
        machineid = Objects.requireNonNull(intent.getExtras()).getString("machineId");

        RequestBody fileImage = RequestBody.create(file, MediaType.parse("image/png"));

        MultipartBody.Part mImagePart = MultipartBody.Part.createFormData("mekanik", file.getName(), fileImage);
        PostRetrivers uploadPhotoMekanik = new PostRetrivers();
        Callback<PhotoMekanik> callback = new Callback<PhotoMekanik>() {
            @Override
            public void onResponse(Call<PhotoMekanik> call, Response<PhotoMekanik> response) {
                System.out.println();
            }

            @Override
            public void onFailure(Call<PhotoMekanik> call, Throwable t) {
                Toast.makeText(PutWeeklyDatasActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        };
        RequestBody mekID = RequestBody.create(machineid, MediaType.parse("text/plain"));

        uploadPhotoMekanik.sendPhotoMekanik(callback, mImagePart, mekID, token);
    }

Редактировать: я решил эту проблему, заменив: @Headers("Accept: application/json")

, но теперь я есть другая ошибка:

expected begin_object but was number at line 1 column 6 path $ 

enter image description here

Это запрос, когда я использую почтальон, он дает мне trans_id, который является только числом и не не содержит никаких скобок. Я не понимаю ошибки, потому что я новичок в модернизации. Моя модель:

public class PhotoMekanik implements Serializable {
    @SerializedName("machineid")
    private String machineid;
    @SerializedName("mekanik")
    private String mekanik;
    @SerializedName("trans_id")
    private String trans_id;

    public PhotoMekanik(String machineid, String mekanik, String trans_id) {
        this.machineid = machineid;
        this.mekanik = mekanik;
        this.trans_id = trans_id;
    }

    public String getMachineid() {
        return machineid;
    }

    public void setMachineid(String machineid) {
        this.machineid = machineid;
    }

    public String getMekanik() {
        return mekanik;
    }

    public void setMekanik(String mekanik) {
        this.mekanik = mekanik;
    }

    public String getTrans_id() {
        return trans_id;
    }

    public void setTrans_id(String trans_id) {
        this.trans_id = trans_id;
    }
}
...