#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(...)