【问题标题】:Casting the output of Query.getResultList()转换 Query.getResultList() 的输出
【发布时间】:2018-06-02 01:53:22
【问题描述】:

在我的应用中,当用户请求模型列表(SheetItem)时,服务会查询数据库并将结果返回给控制器

这是我的模特:

  public class SheetItem
   {
       private long id;
       private String name;
       .. getters and setters and constructor 
   }

这是服务代码:

public List<SheetItem> listSheets(int pageNumber) {
    Query query= em.createQuery("select id,name from SheetItem");
    query.setFirstResult(pageNumber*10);
    query.setMaxResults(10);
    return query.getResultList();   
}

这是控制器:

@GetMapping("/list")
public @ResponseBody List<SheetItem> getAllSheets(@RequestParam("page") int pageNum){   
       List<SheetItem> realList = sheetServices.listSheets(pageNum);
       return   realList;
}

问题是返回给用户的数据不是 JSON 格式的(即使有“Content-Type:application/json;charset=UTF-8”自动生成的标头)。 输出是:

[
    [
      1,
      "my first sheet"
    ],
    [
      2,
      "my second sheet"
    ]
]

在调试代码的时候,注意到返回的List的成员类型是Object

如何将格式转换为 JSON?

【问题讨论】:

    标签: java json spring rest jpa


    【解决方案1】:

    您返回单个对象字段...并获得一个数字和一个字符串。

    Query query= em.createQuery("select id,name from SheetItem");
    

    返回所需类型的对象...

    Query query= em.createQuery("select sh from SheetItem sh");
    

    ...并获得正确的 JSON。

    【讨论】:

    • select语句可以简单到"from SheetItem"达到同样的效果
    【解决方案2】:

    使用TypedQuery 确保返回正确的类型:

    public List<SheetItem> listSheets(int pageNumber) {
        TypedQuery<SheetItem> query = em.createQuery("from SheetItem", SheetItem.class);
        // ... this part is unchanged ...
        return query.getResultList();   
    }  
    

    【讨论】:

      猜你喜欢
      • 2014-06-23
      • 2010-10-31
      • 2022-12-06
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多