Нет метода ServerRequest::getModel
, но ServerRequest::bodyToMono(Class)
, который извлекает тело, где находится ваша модель, до Mono<T>
.
Затем используйте преимущество типа возврата метода реактивного хранилища ReactiveCrudRepository::save
, возвращающего Mono<T>
с использованием Mono::flatMap
.
I Я не проверял его, но он должен работать.
private Mono<ServerResponse> saveStudent(ServerRequest request) {
return request.bodyToMono(Student.class) // Mono<Student> (a new one)
.flatMap(repo::save) // Mono<Student> (a saved one)
.then(ServerResponse // redirect sequence
.status(HttpStatus.PERMANENT_REDIRECT)
.render("redirect:/students", new Object()));
}
// .flatMap(repo::save) is the same as .flatMap(newStudent -> repo.save(newStudent))
Обратите внимание, что метод Mono::then
отбрасывает элемент из источника, поэтому перенаправленный объект остается как new Object()
, поэтому вы хотите использовать Mono::map
.
private Mono<ServerResponse> saveStudent(ServerRequest request) {
return request.bodyToMono(Student.class) // Mono<Student> (a new one)
.flatMap(repo::save) // Mono<Student> (a saved one)
.map(savedStudent -> ServerResponse // redirect sequence
.status(HttpStatus.PERMANENT_REDIRECT)
.render("redirect:/students", savedStudent));
}