Назад к вопросам
Senior
3
@PutMapping("/create") public Book create(@RequestBody CreateBook request) throws Exception { System.out.println("Check if book exists " + map); Book book = new ObjectMapper().convertValue(map, Book.class); Book b = repo.findByTitle(book.getTitle()); if (b != null) { throw new Exception("Book already exists"); } book.setId(UUID.randomUUID().toString()); repo.save(book); log.debug("Book {} by {} is created with id {}", book.getTitle(), book.getAuthor(), book.getId()); return book; } @GetMapping("/get") public Book get(@QueryParam("id") String id) { log.debug("Get book " + id); return repo.findAll().stream() .filter(b -> b.getId().equals(id)) .findFirst().get(); } @GetMapping("/{id}") public Book get(@RequestParam("id") String id) { log.debug("Get book ", id); return repo.findById(id).orElseThrow(() -> new BookAlreadyExeption("book not find")) findAll().stream() .filter(b -> b.getId().equals(id)) .findFirst().get(); }
Компании, где спрашивали
СТЭП ЛОДЖИК (STEP LOGIC)
Ответ от нейросети
sobes.tech AI
В представленном коде есть несколько проблем и неточностей:
- В методе
createиспользуется переменнаяmap, которая не определена в методе — вероятно, должен использоваться параметрrequest. - В методах
getиспользуются разные аннотации для параметров (@QueryParamи@RequestParam), что может привести к конфликтам. В Spring MVC обычно используется@RequestParamили@PathVariable. - В последнем методе
getесть синтаксическая ошибка: послеorElseThrowидёт лишний кодfindAll().stream()..., который не имеет смысла. - Исключение
BookAlreadyExeptionнаписано с ошибкой в названии (должно бытьBookAlreadyException).
Исправленный пример метода создания книги:
@PostMapping("/create")
public Book create(@RequestBody CreateBook request) throws Exception {
Book book = new ObjectMapper().convertValue(request, Book.class);
Book existing = repo.findByTitle(book.getTitle());
if (existing != null) {
throw new Exception("Book already exists");
}
book.setId(UUID.randomUUID().toString());
repo.save(book);
log.debug("Book {} by {} is created with id {}", book.getTitle(), book.getAuthor(), book.getId());
return book;
}
И пример метода получения книги по id:
@GetMapping("/{id}")
public Book get(@PathVariable String id) {
log.debug("Get book {}", id);
return repo.findById(id).orElseThrow(() -> new BookNotFoundException("Book not found"));
}
Таким образом, нужно внимательно следить за корректностью аннотаций, обработкой исключений и использованием параметров.