Witam. Robię projekt w Spring Boot, z restowymi metodami do baz danych. O ile z metodami GET, POST, DELETE nie mam problemu, to nie mogę zrobić prostej metody PUT, która by na podstawie ID nadpisywała wskazany rekord w bazie danych. Na początku próbowałem jakoś analogicznie do tego tutaj: https://www.baeldung.com/http-put-patch-difference-spring
@PutMapping("country/{name}")
public void replaceCountry(@RequestBody Country country, @PathVariable("name")String name){
countryRepository.save(country, name);
}
Tyle, że countryRepository nie posiada w ogóle metody save
z dwoma argumentami. Pomyślałem, że może trzeba to nadpisać i będzie grało, ale też nie. Próbowałem jeszcze tak:
@PutMapping("country/{name}")
Country replaceCountry(@RequestBody Country newCountry, @PathVariable String name) {
return countryRepository.findFirstByName(name)
.map(country -> {
country=newCountry;
return countryRepository.save(country);
})
.orElseGet(() -> {
return countryRepository.save(newCountry);
});
}
Jeśli dobrze kumam, to z samym zapytaniem jest coś nie tak. No próbowałem przez Postmana w ten sposób, że ustawiam metodę PUT
, w sekcji body robię JSona, którym ma być nadpisany rekord w bazie danych, a parametr w zapytaniu przekazuję o tak: localhost:8080/country?name=Erathia
.