Sobes.tech
Back to questions
Senior
9

@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; } public BookStoreController(BooksRepository repo, Boolean bool, List<String> keys) { this.repo = repo; if (Boolean.TRUE.equals(bool)) { // check first key if(keys != null && !keys.isEmpty()){ String firstKey = keys.get(0); if (firstKey == "public") { for (String key : keys){ // ... some logic log.debug("Using key {}", key); }; } } } }

Companies where asked
СТЭП ЛОДЖИК (STEP LOGIC)

Answer from AI

sobes.tech AI

В представленном коде есть несколько важных моментов, которые стоит исправить или улучшить:

  1. Сравнение строк через ==
if (firstKey == "public") {

В Java строки нужно сравнивать через .equals(), иначе сравнивается ссылка, а не содержимое. Правильно:

if ("public".equals(firstKey)) {
  1. Обработка исключений

Метод create выбрасывает общее Exception. Лучше использовать более специфичные исключения, например, IllegalArgumentException или собственные.

  1. Преобразование Map в объект

Использование ObjectMapper().convertValue(map, Book.class) — рабочий подход, но стоит убедиться, что структура map соответствует полям Book.

  1. Генерация ID

UUID.randomUUID().toString() — хороший способ создать уникальный идентификатор.

  1. Логирование

Использование log.debug с параметрами — правильный подход для эффективного логирования.

Итог: основная ошибка — сравнение строк через ==, что приведёт к неверному поведению. Нужно заменить на .equals(). Также стоит улучшить обработку исключений и проверить корректность данных из map.