Проблема с реализацией PUT запроса в приложении
Подскажите пожалуйста, как реализовать PUT запрос для CRUD приложения?
Реализовал в приложении POST, GET, DELETE запросы, с PUT пока что затык.
Пример запроса:
http://localhost:8080/api/users/3
Сейчас PUT метод создает пользователя нового вместо его обновления по id и возвращает список пользователей. Пример кода ниже.
Сontroller:
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public ResponseEntity registration(@RequestBody UsersEntity user) {
try {
userService.registration(user);
return ResponseEntity.ok("Пользователь успешно создан");
} catch (UserAlreadyExistException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
catch (Exception e) {
return ResponseEntity.badRequest().body("Произошла ошибка");
}
}
@GetMapping
public ResponseEntity getUsers() {
try {
return ResponseEntity.ok(userService.getAll());
} catch (Exception e) {
return ResponseEntity.badRequest().body("Произошла ошибка");
}
}
@GetMapping("/{id}")
public ResponseEntity getOneUser(@PathVariable Long id) {
try {
return ResponseEntity.ok(userService.getOne(id));
} catch (UserNotFoundException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
catch (Exception e) {
return ResponseEntity.badRequest().body("Произошла ошибка");
}
}
@PutMapping("/{id}")
public ResponseEntity updateUser(@PathVariable Long id, @RequestBody UsersEntity user) {
try {
userService.update(id, user);
return ResponseEntity.ok(userService.getAll());
} catch (Exception e) {
return ResponseEntity.badRequest().body("Произошла ошибка");
}
}
@DeleteMapping("/{id}")
public ResponseEntity deleteUser(@PathVariable Long id) {
try {
return ResponseEntity.ok(userService.delete((id)));
} catch (Exception e) {
return ResponseEntity.badRequest().body("Произошла ошибка");
}
}
}
Service:
@Service
public class UserService {
@Autowired
private UserRepo userRepo;
public UsersEntity registration(UsersEntity user) throws UserAlreadyExistException {
if(userRepo.findByUsername(user.getUsername()) != null) {
throw new UserAlreadyExistException("Пользователь с таким email адресом существует"); // проверка на пользователя в базе данных
}
return userRepo.save(user);
}
public Iterable <UsersEntity> getAll() {
return userRepo.findAll();
}
public UsersEntity getOne(Long id) throws UserNotFoundException {
UsersEntity user = userRepo.findById(id).get();
if (user == null) {
throw new UserNotFoundException("Пользователь не найден");
}
return user;
}
public UsersEntity update(Long id, UsersEntity user) {
return userRepo.save(user);
}
public Long delete(Long id) {
userRepo.deleteById(id); // функция удаляющая записи в репозитории deleteById
return id;
}
}