BookStoreController: сравнение строк и создание книги

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

@PutMapping("/create") public Book create(Map<String, Object> map) throws Exception { System.out.println("Проверка существования книги " + map); Book book = new ObjectMapper().convertValue(map, Book.class); Book b = repo.findByTitle(book.getTitle()); if (b != null) { throw new Exception("Книга уже существует"); } book.setId(UUID.randomUUID().toString()); repo.save(book); log.debug("Книга {} автором {} создана с 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)) {
    // проверка первого ключа
    if(keys != null && !keys.isEmpty()){
        String firstKey = keys.get(0);
        if (firstKey == "public") {
            for (String key : keys){
                // ... некоторая логика
                log.debug("Используем ключ {}", key);
            };
        }
    }
}

}

Ответ

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

  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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее