【问题标题】:Serializing List<javax.persistence.Tuple> to JSON将 List<javax.persistence.Tuple> 序列化为 JSON
【发布时间】:2019-03-07 17:21:49
【问题描述】:

我正在使用 JPA (EclipseLink 2.5.2) 和 Jersey 2.27 在 Java 8 下的 Tomcat 8 上运行一个项目。目前我使用映射实体和一些简单列表(不同的值、键值对)检索结果。我已经实现了服务器端分页、过滤和排序。现在我正在尝试添加动态聚合数据集的功能。

我在 SO 和其他网站上搜索了序列化从我的条件生成器查询返回的元组列表的最佳方法。到目前为止,我还没有找到任何可以回答我的问题的东西。我可以想到三种方法来做到这一点,除非这里有一些好的指针:

  1. 使用反射创建适当的对象并在我的查询中提供它
  2. 一次运行一个结果并将每个元素的我自己的 JSON 写入一个 StringBuffer
  3. ArrayList&lt;HashMap&lt;String, Object&gt;&gt; HashMap 使用别名和匹配结果构建然后添加到列表中,列表正常序列化

因此,如果没有“简单”的方法来序列化元组列表,那么上面哪种方法最有意义?选项 3 确实有效,但对我来说就像是一个杂物。

【问题讨论】:

  • List&lt;Map&lt;String, Object&gt;&gt; 看起来很正常。也许您可以将结果转换为EclipseLink 级别的地图列表?看到这个问题:JPA 2.0 native query results as map。我不确定,但也许有办法将List&lt;Tuple&gt; 转换为List&lt;Map&gt;
  • @MichałZiober 谢谢!我重写了一些代码以使用 CreateQuery 而不是 CreateTupleQuery 并使用您的建议,它使代码更清晰,还允许我删除对结果的所有操作。感谢您的帮助!
  • 如果您认为我的评论对您有所帮助并帮助了您,我可以将其转换为答案,以便您接受。也许它对其他人有用。
  • @MichałZiober 我想不出更好的答案,所以请这样做。

标签: java json jpa tuples


【解决方案1】:

通常在业务逻辑中使用Reflection 听起来不太好,因此您应该消除第一个选项(1.)。 (2.) - 当您想使用流式传输API 时,一个接一个地序列化object 听起来不错,在您的情况下,这不是一个选项。第三个 (3.) 看起来很正常,这是一个很好的解决方案,因为它是通用的,List&lt;Map&lt;String, Object&gt;&gt; 非常适合 JSON 规范:

  • JSON array - List
  • JSON object - Map
    • property - String
    • any JSON object - Object

您应该尝试在EclipseLink 级别转换查询结果。请参阅JPA 2.0 native query results as map 问题,建议将查询结果转换为ResultType.Map

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 2021-06-14
    • 2015-06-07
    • 2017-05-21
    • 2017-02-28
    • 2021-01-14
    • 2018-01-09
    • 2016-10-08
    相关资源
    最近更新 更多