在我的应用程序中,当用户请求模型列表(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的成员类型是对象:
如何将格式转换为JSON?
答案 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