Sobes.tech
Назад к вопросам
Senior
5

@PutMapping("/create") public Book create(Map<String, Object> map) 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(); }

Компании, где спрашивали
СТЭП ЛОДЖИК (STEP LOGIC)

Ответ от нейросети

sobes.tech AI

В представленном коде есть несколько важных моментов:

  1. В методе create используется Map<String, Object> для приема данных, что не типично для Spring MVC. Обычно используют DTO с аннотацией @RequestBody.

  2. Проверка существования книги по названию происходит через repo.findByTitle. Если книга найдена, выбрасывается исключение.

  3. Для создания ID используется UUID.randomUUID().toString().

  4. В методе get используется @QueryParam (из JAX-RS), в Spring MVC правильнее использовать @RequestParam.

  5. Поиск книги по ID происходит через перебор всех записей repo.findAll(), что неэффективно. Лучше использовать метод репозитория findById.

Пример улучшенного варианта:

@PostMapping("/create")
public Book create(@RequestBody Book book) throws Exception {
    if (repo.findByTitle(book.getTitle()) != 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(@RequestParam("id") String id) {
    log.debug("Get book {}", id);
    return repo.findById(id).orElse(null);
}

Такой подход более типичен и эффективен для Spring Boot приложений.