【发布时间】:2020-04-08 19:48:30
【问题描述】:
我的实体 Mealplan 有一个 mealsPerWeek 属性作为 LinkedHashMap。
@Entity
public class Mealplan {
@Id
private int id;
@ManyToMany
private Map<Weekday, Meal> mealsPerWeek = new LinkedHashMap<>();
public Map<Weekday, Meal> getMealsPerWeek() {
return mealsPerWeek;
}
}
map属性的key是Weekday,是一个枚举:
public enum Wochentag {
Monday, Tuesday, Wednesday, Thursday, Friday
}
现在我希望在我的 API 中,Meals 会以枚举的正确顺序显示。但它显示得很随机:
{
id: 1,
mealsPerWeek: {
Tuesday: {
id: 3,
name: "Salad",
preis: 3,
art: "vegan"
},
Monday: {
id: 4,
name: "Linsensuppe",
preis: 23.5,
art: "vegan"
},
如何在我的 REST API 中对其进行排序,以便以正确的顺序显示密钥?
编辑:我在每次应用程序启动时通过data.sql 插入对象,并意识到每次顺序都不同。
【问题讨论】:
-
LinkedHashMap 按键插入映射的顺序排列。它没有排序。您是否希望在创建新对象或查询 Mealplan 时对其进行排序?
-
问题将是虽然迭代顺序是填充顺序,但填充是由 JPA 实现完成的 - Hibernate 或您正在使用的任何东西。这不是一个答案,因为我不确定如何将排序顺序应用于实体中的 Map 字段 - 不过有人会知道。
-
感谢您的快速回答。那么,在客户端对密钥进行排序会更好吗? @Lesiak 是的,我希望在创建新对象时对其进行排序。但它始终是相同的顺序,并且始终是每个键一个对象。
-
您可以对枚举使用顺序值,并在顺序值上使用带有比较器的树形图。
-
您在创建新对象时说 vorderbis 错误。这是令人惊讶的。您能告诉我们您是如何构建它的吗?
标签: java spring spring-boot spring-data-jpa spring-rest