Во-первых, я использую Spring MVC.Весна не сериализуется HashMap Атрибут
У меня есть «умение» -modelclass, где я поместил @JsonIgnoreProperties
@JsonIgnoreProperties({"personSkills","berufsgruppes","skills"})
@JsonPropertyOrder({"idSkill", "name", "levelBezeichnung", "skill"})
Я использую его, потому что есть много-ко-многим или многие-к-одному или один-ко-многим отношений и без этого свойства вызывает StackOverFlowException (Бесконечная ошибка). Один навык может иметь много навыков, поэтому существует своего рода рекурсия.
Я реализовал подкласс для «умения» с именем «SkillBean», который имеет еще один атрибут «checked», который имеет значение только для приложения, а не для базы данных.
public class Skill implements java.io.Serializable {
private Set<Skill> skills = new HashSet<Skill>(0);
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "skill")
public Set<Skill> getSkills() {
return this.skills;
}
public void setSkills(Set<Skill> skills) {
this.skills = skills;
}
public class SkillBean extends Skill implements Serializable{
public boolean checked;
public SkillBean() {
}
public SkillBean(Skill skill, boolean checked) {
this.checked = checked;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
}
Im Использование BeanUtils.copyProperties() скопировать Skill-Object в SkillBean-Object. Это прекрасно работает. Мне нужно переупорядочить навыки, потому что в настоящее время я получаю наименьшее значение Child-Skill, а не его родителя. Для этого я пытаюсь переупорядочить объекты и пытаться построить дерево в списке. У каждого навыка есть Набор своих детей.
private ArrayList<SkillBean> formatSkillMap(HashMap<Integer, SkillBean> map) {
Map<Integer, SkillBean> tempSkills = (Map<Integer, SkillBean>) map.entrySet().stream().filter(p -> p.getValue().getSkill() == null)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
ArrayList<SkillBean> list = new ArrayList<SkillBean>(tempSkills.values());
for (int i = 0; i < list.size(); i++) {
SkillBean sb = list.get(i);
tempSkills = (Map<Integer, SkillBean>) map.entrySet().stream().filter(p -> p.getValue().getSkill() != null)
.filter(p -> p.getValue().getSkill().getIdSkill() == sb.getIdSkill()).collect(Collectors.toMap(Entry::getKey, Entry::getValue));
Set<Skill> test = new HashSet<Skill>(tempSkills.values());
list.get(i).setSkills(test);
}
return list;
Но список оленья кожа вернуть Sub-Skillset Может кто-нибудь сказать мне, почему subskills не сериализовать? Когда я возвращаю подмножество этого родительского навыка, их подсечки сериализуются.
0: {
"idSkill": 34
"name": "Methodik"
"levelBezeichnung": {
"@id": 1
"idLevelBezeichnung": 1
"bezeichnung": "Standard"
"handler": {}
"hibernateLazyInitializer": {}
}-
"checked": true
}
без переназначения это выглядит, как это н, но проблема заключается в том, что умение с идентификатором = 34 является родителем умение и 9 является subskill. Я хочу, чтобы все было наоборот. Там может быть три уровня.
9: {
"idSkill": 9
"name": "Standards"
"levelBezeichnung": {
"@id": 1
"idLevelBezeichnung": 1
"bezeichnung": "Standard"
"handler": {}
"hibernateLazyInitializer": {}
}-
"skill": {
"idSkill": 34
"name": "Methodik"
"levelBezeichnung": 1
}-
"checked": true
}
Я не совсем понимаю ваш вопрос.Это проблема с сопоставлением JPA, сопоставлением JSON или некоторой частью вашего кода (возможно, какая-то часть, которую вы еще не показали нам)? Вы отлаживали свой код, чтобы узнать, где он начинает ошибаться? – Thomas
Btw, название свойства «berufsgruppes» заставляет меня содрогнуться;) – Thomas
Я отлаживал его, а в постуслуги навыка есть hashMap с субкиллами, но сериализация кажется неправильной, и я не знаю, почему и как найти ошибку. Поэтому я не думаю, что это часть моего кода. Так что честно, я не знаю, что это JPA или JSON. Классы моделей генерируются спящим режимом. Я знаю, что вы имеете в виду: P – Andy