У меня есть простой север на 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);
}
Сама я не очень давно занимаюсь программированием, и особенно тем что связанно с серверными технологиями, так что большую часть кода брала с различных ресурсов. Надеюсь на вашу помощь и заранее благодарю.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При генерации csv файла и последующем его открытии в excel получаю ошибкуРешить ее удалось добавив в первую ячейку первым символом пробел
Смотрю картинку про хэш‑таблицу и вижу такое слово: bucketsПосоветуйте что это такое и для чего?
А где принято хранить настройки подключения к БД (путь, логин, пароль) в Java программах?
есть десктопное приложение для обработки метеорологических данныхВычисления достаточно трудоемкие, для получения результата к примеру...