Issue
I am trying to update an existing record in my database for a put request in spring boot.
Incoming Request -
src="https://i.stack.imgur.com/HyCgN.png" alt="enter image description here" />
Handler method in controller class
// put method for updating record
@PutMapping("/accounts/{id}")
public Account putAccount(@RequestBody Account account, @PathVariable("id") int id) {
System.out.println(account);
Account ac = this.accountServices.addAccount(account);
// save method of crud repository also updates if data is already present
return ac;
}
AccountServices class addAccount() method
// add an account
public Account addAccount(Account account) {
Account acc = this.accountRepository.save(account);
return acc;
}
AccountRepository interface
public interface AccountRepository extends CrudRepository<Account, Integer> {
//custom finder method to get book record with id
}
For every request it is adding new record instead of updating already existing record. Someone please help here.
Adding Account class
@Entity
@Table(name = "Account")
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int accountNumber;
public String accountType;
public int balance;
@ManyToMany(cascade = CascadeType.ALL)
@JsonManagedReference
@JsonIgnore
private List<Customer> customers;
//skipped constructors, getters and setters
}
Solution
Maybe you can try something like that
private void _setPackAddress(Pack objectPack, Pack pacDao) {
if (objectPack.getPackageAddress() != null) {
pacDao.getPackageAddress().setCity(objectPack.getPackageAddress().getCity());
pacDao.getPackageAddress().setNumber(objectPack.getPackageAddress().getNumber());
pacDao.getPackageAddress().setPostalCode(objectPack.getPackageAddress().getPostalCode());
pacDao.getPackageAddress().setStreet(objectPack.getPackageAddress().getStreet());
}
}
And where can you see from where parameters come
Pack pacDao = this.packRepository.findById(id).orElseThrow(() -> new OpenApiResourceNotFoundException("Pack not found:: " + id));
not directly like that
private void _setPackAddress(Pack objectPack, Pack pacDao) {
if (objectPack.getPackageAddress() != null) {
pacDao.setPackageAddress(objectPack.getPackageAddress());
}
}
I also encountered this problem, but I solved it that way. I hope this post to be helpful for you. Keep coding :-)
Answered By - NsdHSO
Answer Checked By - David Marino (JavaFixing Volunteer)