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