Я работаю над демонстрацией объекта с картой в Thymeleaf и отправляю его бэкенду.
Моя целевая сущность имеет вид:
public class Series {
@Id
@GeneratedValue
private long id;
@ElementCollection
@CollectionTable(name = "series_food")
@MapKeyColumn(name = "fid")
@Column(name = "num")
private Map<Food, Integer> foods = new HashMap<>();
}//constructors, getters and setters are ignored
, а мои методы контроллера похожи:
@GetMapping("/series/{sid}")
public String getSeries(@PathVariable("sid") Long sid, Model model) {
Series series = producerService.getSeries(sid);
model.addAttribute("series", series);
return "rest/series";
}
@PostMapping("/series")
public String saveSeries(@Valid Series series, Model model) {
System.out.println("calling addSeries");
Series series1 = producerService.modifySeries(series);
model.addAttribute("series", series1);
return "rest/series";
}
и я связываю его с Thymeleaf следующим образом:
<tr th:each="f,ptr : *{foods}">
<th ><input type="text" th:value="${f.key.name}"></th>
<th><input type="text" th:value="${f.value}" th:field="*{foods[__${f.key}__]}"></th>
</tr>
Однако я получил это исключение времени выполнения:
Caused by: org.springframework.beans.InvalidPropertyException: Invalid property 'foods[ycqian.yummy.entity.food.Food@483408f]' of bean class [ycqian.yummy.entity.food.Series]: Invalid index in property path 'foods[ycqian.yummy.entity.food.Food@483408f]';
nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'ycqian.yummy.entity.food.Food' for property 'null';
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.lang.Long] for value 'ycqian.yummy.entity.food.Food@483408f';
nested exception is java.lang.NumberFormatException: For input string: "ycqian.yummy.entity.food.Food@483408f"
Я прочитал эти вопросы,но они не работают для меня. q1 q2
Как мне решить эту проблему?
=============== ОБНОВЛЕНИЕ =======================
Если я изменю оператор связывания на th:field="*{foods[__${ptr.index}__]}"
, исключение не будет выдано, но что-то не такс дисплеем.
Ожидается, что представление будет выглядеть как Ожидается , но поле суммы не может быть отображено должным образом real