我正在使用Pageable返回带有页面的json结果。我的控制器的一个例子
@GetMapping("/nome/{nome}")
public ResponseEntity<Page<Cidadao>> consultaPorNome(
@PathVariable(value="nome",required=true) String nome,
@RequestParam(value="pagina", defaultValue="0") Integer page,
@RequestParam(value="quantidade", defaultValue="10") Integer linesPerPage,
@RequestParam(value="ordem", defaultValue="nome") String orderBy,
@RequestParam(value="direcao", defaultValue="ASC") String direction){
Page<Cidadao> lista = cidadaoService.findByNome(nome,page,linesPerPage,orderBy, direction);
return ResponseEntity.ok(lista);
}
我得到json
{
"content": [
{
"id": 1,
"name": "Lucas"
},
{
"id": 2,
"name": "Erick"
},
],
"totalElements": 23,
"totalPages": 3,
"last": false,
"numberOfElements": 10,
"first": true,
"sort": [
{
"direction": "ASC",
"property": "nome",
"ignoreCase": false,
"nullHandling": "NATIVE",
"ascending": true,
"descending": false
}
],
"size": 10,
"number": 0
}
但是我想以这种方式返回
{
"data":{
"content" : [
{
"id": 1,
"name": "Lucas"
},
{
"id": 1,
"name": "Lucas"
}
],
"totalElements": 23,
"totalPages": 3,
"last": false,
"numberOfElements": 10,
"first": true,
"sort": [
{
"direction": "ASC",
"property": "nome",
"ignoreCase": false,
"nullHandling": "NATIVE",
"ascending": true,
"descending": false
}
],
"size": 10,
"number": 0
},
errors:[]
}
是否可以实现类似这样的功能来更改或添加诸如错误之类的属性?或者,如果可能的话,从Page中更改name属性,例如对totalofs更改numberofTotalElementBySomething .... ??
答案 0 :(得分:0)
在寻找时,我没有找到解决此问题的漂亮方法。所以,我这样做:
创建一个名为PageAdapter的类(或您喜欢的任何类)
public class PageAdapter<T extends Serializable> implements Serializable {
private long totalElements;
private long totalPages;
private long size;
private List<T> content;
public PageAdapter(Page<T> page){
this.totalElements = page.getTotalElements();
this.totalPages = page.getTotalPages();
this.size = page.getSize();
this.content = page.getContent();
}
}
并在构造函数中接收原始的Pageable。
您可以自定义您的属性,在我的案例中使用了这些属性。
之后,您可以在控制器/资源中返回PageAdapter
。
如果有更好的解决方案,我也想知道。
一个建议,spring可以接收Pageable的实例,因此,您不需要接收有关大小,页面,顺序等的每个参数。 只需这样做:
public ResponseEntity<Page<Cidadao>> consultaPorNome(
@PathVariable(value="nome",required=true) String nome, Pageable pageable){
您将获得有关尺寸,页面,订单...的所有信息。
我不是英语母语人士,因此可能包含语法错误。