Я занимаюсь разработкой приложения Spring Boot MVC, которое использует шаблоны Thymeleaf во внешнем интерфейсе.
Я пытаюсь связать HashMap из моей модели MVC с переменной JavaScript в одном из моих шаблонов Thymeleaf. Это то, что было сделано до сих пор: -
В своем классе контроллеров MVC я создал HashMap, который представляет навыки пользователя, организованные по категориям. Класс Skill - это объект данных, содержащий свойства name и id: -
Map<String, List<Skill>> skillsMap = new HashMap();
Я заполнил эту карту всей информацией о категориях и навыках, а затем добавил еек моей модели: -
model.addAttribute("skillsMap", skillsMap);
В моем шаблоне Thymeleaf в разделе скрипта я пытаюсь привязать этот HashMap к переменной. На втором этапе я пытаюсь извлечь один из списков с карты и назначить вторую переменную: -
var skillsMapMap = [[${skillsMap}]];
var adminList = skillsMapMap.get('Admin');
Когда я отлаживал это, я мог видеть, что HashMap читается и делается попытка связать его с моей переменной JavaScript: -
var skillsMapMap = {Languages=[Python, SQL, PL/SQL, Java], Databases=[MySQL, Oracle, Mongo], Editors=[Word, TextPad, Notepad]};
Это выглядело хорошо на первый взгляд, и я мог видеть, что он содержит все мои данные, но выдает следующую ошибку: -
Uncaught Syntax Error: invalid shorthand property initializer
Исследовав это, я понял, что эта ошибка была вызвана тем, что Java по умолчанию не сериализует карту в допустимом формате JSON, и поэтому попытка привязки к переменной JavaScript не удалась. Итак, вместо того, чтобы просто добавить HashMap прямо в модель, как на шаге 2, я добавил некоторый код, чтобы сначала использовать Джексон для преобразования его в строку JSON: -
//Populate the map with all required data then....
String objectMapper = null;
try {
objectMapper = new ObjectMapper().writeValueAsString(skillsMap);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
model.addAttribute("skillsMap", objectMapper);```
Этовремя Когда я пытаюсь связать это с моей переменной JavaScript, объект выглядит так, когда я отлаживаю в своем браузере: -
var skillsMapJson = {"Languages_OD":[{"id":66,"name":"SQL"},{"id":67,"name":"PL/SQL"}], etc, etc};
Теперь JSON выглядитдопустимо, но все кавычки экранированы, и теперь выдается другое исключение: -
```Uncaught SyntaxError: Unexpected token &```
Я чувствую, что если бы строка JSON содержала вместо "настоящие кавычки", то карта успешно привязалась бы к моей переменной. Спасибо за любые советы, как с этим справиться. Большое спасибо за чтение.
РЕДАКТИРОВАТЬ: скриншот ошибки добавлен ниже: -