java Spring сервер не получает POST и PUT запросы из android

104
21 января 2021, 22:50

У меня есть простой север на Spring`е, что должен обрабатывать GET, PUT и POST запросы, и работать с БД соответственно. С GET никаких проблем нет, и приложение спокойно получает данные из базы. Но вот когда по нажатию кнопки мне нужно сохранить новые данные отправив POST, или обновить ее часть через PUT, сервер не хочет видеть запросы. Andrоid приложение использует retrofit2 для создания запросов.

Код обработки запросов:

@RestController
public class ReminderController {
@Autowired
private RemindRepository repository;
@RequestMapping(value = "/profile", method = RequestMethod.GET)
@ResponseBody
public List<Profile> getAllProfiles(  ){
    return repository.findAll();
}
@RequestMapping(value = "/profile/{id}", method = RequestMethod.GET)
@ResponseBody
public Profile getProfile(@PathVariable("id") long profileID){
    return repository.findById(profileID).get();
}
@RequestMapping(value = "/profile", method = RequestMethod.POST)
@ResponseBody
public Profile saveProfile(@RequestBody Profile profile){
    return repository.saveAndFlush(profile);
}
@RequestMapping(value = "/profile/{id}", method = RequestMethod.PUT)
@ResponseBody
public Profile putProfile(@PathVariable("id") long id, @RequestParam String name, @RequestParam String address){
    Profile profile = repository.findById(id).get();
    profile.setCourier_name(name);
    profile.setAddress(address);
    repository.save(profile);
    return profile;
}
}

Класс сущности:

@Entity
@Table(name = "profile")
public class Profile {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private long id;
@Column(name = "courier_name", nullable = false, length = 50)
private String courier_name;
@Column(name = "address", nullable = false, length = 100)
private String address;
@Column(name = "number", nullable = false, length = 10)
private String number;
@Column(name = "info", nullable = false, length = 100)
private String info;
public Profile() {
}
public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}
public String getCourier_name() {
    return courier_name;
}
public void setCourier_name(String courier_name) {
    this.courier_name = courier_name;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}
public String getNumber() {
    return number;
}
public void setNumber(String number) {
    this.number = number;
}
public String getInfo() {
    return info;
}
public void setInfo(String info) {
    this.info = info;
}

Код где я отправляю запрос:

     ...
     ...
     Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.1.2:8080/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
    mSaveProfile = findViewById(R.id.save_data_profile);
    mSaveProfile.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            makeCallPost();
          //  makeCallPut();
        }
    });
   // makeCallGet();
}

    public void makeCallPut(){
    Call<GetAndSetProfile> call = jsonPlaceHolderApi.putProfile(1, "Антон", "Киев");
    call.enqueue(new Callback<GetAndSetProfile>() {
        @Override
        public void onResponse(Call<GetAndSetProfile> call, Response<GetAndSetProfile> response) {
            if (!response.isSuccessful()){
                Toast toast = Toast.makeText(getApplicationContext(),
                        "Ошибка подключения 404", Toast.LENGTH_LONG);
                toast.show();
            }
        }
        @Override
        public void onFailure(Call<GetAndSetProfile> call, Throwable t) {
            mName.setText(t.getMessage());
            Toast toast = Toast.makeText(getApplicationContext(),
                    "Ошибка подключения", Toast.LENGTH_LONG);
            toast.show();
        }
    });
}
public void makeCallPost(){
    GetAndSetProfile getAndSetProfile = new GetAndSetProfile(1, mProfile.getName(), mProfile.getAddress(),
            mProfile.getNumber(), mProfile.getInfo());
    Call<GetAndSetProfile> call = jsonPlaceHolderApi.saveProfile(getAndSetProfile);
    call.enqueue(new Callback<GetAndSetProfile>() {
        @Override
        public void onResponse(Call<GetAndSetProfile> call, Response<GetAndSetProfile> response) {
            if (!response.isSuccessful()){
                Toast toast = Toast.makeText(getApplicationContext(),
                        "Ошибка отправки 404", Toast.LENGTH_LONG);
                toast.show();
            }

            Toast toast = Toast.makeText(getApplicationContext(),
                    "Сохранено", Toast.LENGTH_LONG);
            toast.show();
            return;
        }
        @Override
        public void onFailure(Call<GetAndSetProfile> call, Throwable t) {
            mName.setText(t.getMessage());
            Toast toast = Toast.makeText(getApplicationContext(),
                    "Ошибка отправки", Toast.LENGTH_LONG);
            toast.show();
        }
    });
}

Класс GetAndSetProfile.java

public class GetAndSetProfile {
@SerializedName("increment")
private long id;
private String courier_name;
private String address;
private String number;
private String info;
public GetAndSetProfile(long id, String courier_name, String address, String number, String info) {
    this.id = id;
    this.courier_name = courier_name;
    this.address = address;
    this.number = number;
    this.info = info;
}
public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}
public String getCourier_name() {
    return courier_name;
}
public void setCourier_name(String courier_name) {
    this.courier_name = courier_name;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}
public String getNumber() {
    return number;
}
public void setNumber(String number) {
    this.number = number;
}
public String getInfo() {
    return info;
}
public void setInfo(String info) {
    this.info = info;
}

И код JsonPlaceHolderApi.java

public interface JsonPlaceHolderApi {
@GET("profile/{id}")
Call<GetAndSetProfile> getAllProfiles(@Path("id") long id);
@POST("profile")
Call<GetAndSetProfile> saveProfile(@Body GetAndSetProfile getAndSetProfile);
@FormUrlEncoded
@PUT("profile/{id}")
Call<GetAndSetProfile> putProfile(@Path("id") long id, @Field("name") String name, @Field("address") String address);
 }

Сама я не очень давно занимаюсь программированием, и особенно тем что связанно с серверными технологиями, так что большую часть кода брала с различных ресурсов. Надеюсь на вашу помощь и заранее благодарю.

READ ALSO
Пробел в первой ячейке Excel (CSV)

Пробел в первой ячейке Excel (CSV)

При генерации csv файла и последующем его открытии в excel получаю ошибкуРешить ее удалось добавив в первую ячейку первым символом пробел

100
Что такое buckets или бакет?

Что такое buckets или бакет?

Смотрю картинку про хэш‑таблицу и вижу такое слово: bucketsПосоветуйте что это такое и для чего?

99
Хранение настроек

Хранение настроек

А где принято хранить настройки подключения к БД (путь, логин, пароль) в Java программах?

136
Создание очереди задач для rest api java

Создание очереди задач для rest api java

есть десктопное приложение для обработки метеорологических данныхВычисления достаточно трудоемкие, для получения результата к примеру...

101