转换Query.getResultList()的输出

时间:2017-12-19 15:28:07

标签: java json spring rest jpa

在我的应用程序中,当用户请求模型列表(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格式的(即使有一个&#34; Content-Type:application / json; charset = UTF-8&#34;自动生成的头文件)。 输出是:

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

调试代码时,我注意到返回List的成员类型是对象

enter image description here

如何将格式转换为JSON?

3 个答案:

答案 0 :(得分:1)

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

$stmt = $pdo->prepare('SELECT * FROM articles WHERE text LIKE :search');

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

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

...并获得正确的JSON。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

解决方案1 ​​

替换

@GetMapping("/list")

@GetMapping("/list", params="format=json", produces=MediaType.APPLICATION_JSON_VALUE)

解决方案2

替换

return list;

return new ResponseEntity(list, HttpStatus.OK);

方法的返回值
@ResponseBody List<SheetItem>

ResponseEntity