Я пытаюсь использовать Formatter в приложении webflux, но его выбрасывает
java .lang.IllegalStateException: перебор toIterable () / toStream () является блокировкой, которая не поддерживается в thread реактор-http-nio-2
Исключение указывает, что я не могу использовать блок, и метод ожидает объект типа PetType. Я хотел знать, есть ли другой способ сделать это
@Component
public class PetTypeFormatter implements Formatter<PetType> {
private final PetTypeService petTypeServive;
public PetTypeFormatter(PetTypeService petTypeServive) {
this.petTypeServive = petTypeServive;
}
@Override
public String print(PetType petType, Locale locale) {
return petType.getName();
}
@Override
public PetType parse(String text, Locale locale) throws ParseException
{
Iterable<PetType> findPetTypes = petTypeServive.findAll().toIterable();
for (PetType type : findPetTypes)
{
if (type.getName().equals(text)) {
return type;
}
}
throw new ParseException("type not found: " + text, 0);
}
}
Редактировать: сигнатура метода контроллера, который я использую, это
@PostMapping("/pets/new")
public String processCreationForm(@ModelAttribute("owner") Owner owner, @Valid Pet pet,BindingResult result, ModelMap model)
и свойство PetType класса Pet, которое я настраивал через пользовательский форматер при использовании web mvc
Edit2:
@Setter
@Getter
public class Pet
{
private String id;
private PetType petType;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthDate;
private String name;
}
@Setter
@Getter
public class PetType
{
private String name;
@Override
public String toString() {
return name;
}
}