В представленном коде есть несколько важных моментов, которые стоит исправить или улучшить:
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);
};
}
}
}
}
Ответ
В представленном коде есть несколько важных моментов, которые стоит исправить или улучшить:
- Сравнение строк через
==
if (firstKey == "public") {
В Java строки нужно сравнивать через .equals(), иначе сравнивается ссылка, а не содержимое. Правильно:
if ("public".equals(firstKey)) {
- Обработка исключений
Метод create выбрасывает общее Exception. Лучше использовать более специфичные исключения, например, IllegalArgumentException или собственные.
- Преобразование Map в объект
Использование ObjectMapper().convertValue(map, Book.class) — рабочий подход, но стоит убедиться, что структура map соответствует полям Book.
- Генерация ID
UUID.randomUUID().toString() — хороший способ создать уникальный идентификатор.
- Логирование
Использование log.debug с параметрами — правильный подход для эффективного логирования.
Итог: основная ошибка — сравнение строк через ==, что приведёт к неверному поведению. Нужно заменить на .equals(). Также стоит улучшить обработку исключений и проверить корректность данных из map.