spring 如何在Java对象中MapJSON

ezykj2lf  于 2023-10-15  发布在  Spring
关注(0)|答案(2)|浏览(96)

我尝试在Java对象中转换此JSON。但我正在努力改变。

  1. {
  2. "id": "c01cede4-cd45-11eb-b8bc-0242ac130003",
  3. "publisherId": "nintendo",
  4. "name": "Mario",
  5. "timePlayed": {
  6. "2023-05-01": 10,
  7. "2023-05-02": 2,
  8. "2023-05-03": 3,
  9. "2023-05-04": 4
  10. }
  11. }

首先,我创建了一个名为GameData的类,我能够保存前3个参数,没有任何问题。
我的困难是参数timePlayed。我尝试使用注解权限关系模型创建另一个名为TimePlayed的类,但没有成功。另外,我尝试使用Map,而不是使用对象TimePlayed,但它并不工作。
正如你所看到的,timePlayed里面是一个日期和一个整数。
这是我写这个问题时的代码:
GameData类:

  1. @Table(name = "GAME_DATA")
  2. @Entity
  3. @Data
  4. public class GameData {
  5. @Id
  6. @GeneratedValue(strategy = GenerationType.UUID)
  7. private String gameDataId;
  8. private String publisherId;
  9. private String name;
  10. private Map<Date, String> timePlayed;
  11. }

TimePlayed

  1. @Table(name = "TIME_PLAYED")
  2. @Data
  3. @Entity
  4. public class TimePlayed {
  5. @Id
  6. @GeneratedValue(strategy = GenerationType.SEQUENCE)
  7. @Column(name = "id", nullable = false)
  8. private Long id;
  9. private Map<String, Integer> playedDateAndTime;
  10. }

我猜使用第二个类不是最好的方法,但这是我到目前为止所能做的,当然,根本不起作用。
我得到了一些错误,如:

  • 对象引用未保存的 transient 示例-在刷新hibernate JPA之前保存 transient 示例
  • “基本”属性类型不应是Map
ncgqoxb0

ncgqoxb01#

通常转换成map是一个非常重要的任务,我建议改变json本身的结构,如果可能的话,例如,这样:

  1. {
  2. "id": "c01cede4-cd45-11eb-b8bc-0242ac130003",
  3. "publisherId": "nintendo",
  4. "name": "Mario",
  5. "timePlayed": [
  6. {
  7. "date":"2023-05-01",
  8. "time": 10
  9. },
  10. {
  11. "date":"2023-05-02",
  12. "time": 2
  13. },
  14. {
  15. "date":"2023-05-03",
  16. "time": 3
  17. },
  18. {
  19. "date":"2023-05-04",
  20. "time": 4
  21. },
  22. ]
  23. }

这将允许您将您的类带到这种形式:

  1. public class GameData{
  2. public String id;
  3. public String publisherId;
  4. public String name;
  5. public List<TimePlayed> timePlayed;
  6. }
  7. public class TimePlayed{
  8. public LocalDate date;
  9. public inttime;
  10. }

至于你的错误,没有细节很难说,但最有可能的是,这是由于这样一个事实,即子实体需要保留到与父实体相同的程度,或者使用级联类型。JPA Cascade Types / Baeldang

展开查看全部
7vux5j2d

7vux5j2d2#

我可以用这个类来解决我的问题:

  1. @Table(name = "GAME")
  2. @Entity
  3. @Data
  4. public class Game {
  5. @Id
  6. @GeneratedValue(strategy = GenerationType.UUID)
  7. private String gameDataId;
  8. private String publisherId;
  9. private String name;
  10. @ElementCollection
  11. @MapKeyColumn(name = "date")
  12. @Column(name = "time_played")
  13. @DateTimeFormat(pattern = "yyyy/mm/dd")
  14. private Map<LocalDate, Integer> timePlayed;
  15. }

这样,我就可以保存并以我需要的方式显示JSON。

展开查看全部

相关问题