Я пытаюсь перенести свой проект из Spring MVC в Spring WebFlux. Я сейчас использую репозиторий ReactiveCrudRepository
. Чтобы получить шаблон post-redirect-get , который я использовал в Spring MVC, мне нужно переписать текущий конвертер для работы с ReactiveCrudRepository
.
. Я пыталсясделать это следующим образом:
@Component
public class ObjByIdConverter implements Converter<String, Obj> {
@Autowired
private IObjRepository objRepository;
@Override
public Obj convert(String id) {
return objRepository.findById(id).block();
}
}
Когда я реализую конвертер таким образом, я получаю следующую ошибку: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-xxx
. Когда я использовал CrudRepository
вместо ReactiveCrudRepository
, все работало нормально.
Есть ли способ реализовать конвертер для работы с ReactiveCrudRepository
?
~~~ Редактировать1 ~~~
Класс контроллера:
@PostMapping
public Mono<String> processOrder(@ModelAttribute("newCar") Car car) {
webDataBinder.validate();
BindingResult bindingResult = webDataBinder.getBindingResult();
if (bindingResult.hasErrors()) {
return Mono.just("orderForm");
}
return this.carRepository.save(car).thenReturn("redirect:/");
}
Класс модели:
@Document(collection = "cars")
@ToString
@EqualsAndHashCode
public class Car {
@Id
private String id;
private List<Obj> objs = new ArrayList<>();
// constructor, getters, setters, ...
}
Я использую технологию просмотра Thymeleaf.
Я должен предоставить реализацию для ObjByIdConverter
, потому что я получаю следующее сообщение об ошибке: [Failed to convert property value of type 'java.lang.String' to required type 'java.util.List' for property 'objs'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.example.app.model.Obj' for property 'objs[0]': no matching editors or conversion strategy found]