Не удается использовать функцию map с java SE 8

#java #spring

#java #spring

Вопрос:

Я создаю crud-приложение spring boot, в котором мне нужно искать, добавлять и удалять пользовательские параметры.Я изменил соответствие проекта Java 8.

Я следую этому руководству https://www.callicoder.com/hibernate-spring-boot-jpa-one-to-many-mapping-example /

 @RequestMapping(value = "/customers/{custId}", method = RequestMethod.DELETE)
        public ResponseEntity<?> deleteCust(@PathVariable int custId) {
        Customer cust=cRep.findOne(custId);
            return cust.map(cust1 -> {
                cRep.delete(cust1);
                return ResponseEntity.ok().build();
            }).orElseThrow(() -> new ResourceNotFoundException("custId "   custId   " not found"));
        }
  

однако я получаю следующую ошибку:
Метод map(( cust1) -> {}) не определен для типа Customer. можете ли вы мне, пожалуйста, помочь?Заранее спасибо

Комментарии:

1. Тип findOne был изменен с T на Optional<T> в Spring Data 2. Похоже, вы используете версию 1.x.

2. Я имел в виду вызвать map для результата findOne, в руководстве он использовался без определения в классе Post

Ответ №1:

Вам не следует использовать findOne(int) , если вы уже знаете идентификатор в любом случае. findOne возвращает ссылку на целевой объект, а не на Optional<T> больше. Это причина, по которой вы не можете использовать map()

Использование, findById которое определенно возвращает Òptional<T> , которое затем можно сопоставить.

 @RequestMapping(value = "/customers/{custId}", method = RequestMethod.DELETE)
public ResponseEntity<?> deleteCust(@PathVariable int custId) {
    return cRep.findById(custId)
               .map(cust1 -> {cRep.delete(cust1); return ResponseEntity.ok().build();})
               .orElseThrow(() -> new ResourceNotFoundException("custId "   custId   " not found"));
}
  

Ответ №2:

Ваша переменная cust имеет тип класса Customer. Исключение сообщает вам, что класс Customer не имеет метода map. Вы можете попробовать использовать Optional.ofNullable(cRep.findById(custId)).map(...).orElseThrow(...)