Spring MVC 3:将Spring-Data Page返回为JSON

Spring MVC 3:将Spring-Data Page返回为JSON,第1张

Spring MVC 3:将Spring-Data Page返回为JSON

Spring HATEOAS和Spring Data Commons中将支持这种情况。Spring
HATEOAS附带了一个

Pagemetadata
对象,该对象本质上包含与a 相同的数据,
Page
但执行方式较少,因此可以更轻松地将其编组和拆组。

我们将其与Spring HATEOAS和Spring Data
commons结合实现的原因的另一方面是,仅对页面,其内容和元数据进行封送处理并没有价值,但是还希望生成指向可能存在的下一页或上一页的链接,因此客户端不必构造URI即可遍历这些页面本身。

一个例子

假设一个域类

Person

class Person {  Long id;  String firstname, lastname;}

以及相应的存储库:

interface PersonRepository extends PagingAndSortingRepository<Person, Long> { }

现在,您可以公开一个Spring MVC控制器,如下所示:

@Controllerclass PersonController {  @Autowired PersonRepository repository;  @RequestMapping(value = "/persons", method = RequestMethod.GET)  HttpEntity<PagedResources<Person>> persons(Pageable pageable,     PagedResourcesAssembler assembler) {    Page<Person> persons = repository.findAll(pageable);    return new ResponseEntity<>(assembler.toResources(persons), HttpStatus.OK);  }}

这里可能有很多解释。让我们逐步进行:

  1. 我们有一个Spring MVC控制器,将存储库连接到其中。这需要设置Spring Data(通过
    @Enable(Jpa|Mongo|Neo4j|Gemfire)Repositories
    XML等效项)。该controller方法映射到
    /persons
    ,这意味着它将接受
    GET
    对该方法的所有请求
  2. 从该方法返回的核心类型是a
    PagedResources
    -Spring HATEOAS的类型,它表示一些内容中带有
    links
    加号的内容
    Pagemetadata
  3. 调用该方法时,Spring MVC将必须为
    Pageable
    和创建实例
    PagedResourcesAssembler
    。为了使此工作正常进行,您需要通过
    @EnableSpringDataWebSupport
    即将在Spring Data Commons里程碑中引入的注释或通过独立的bean定义(在此处记录)来启用Spring Data Web支持。

Pageable
会从请求信息来填充。默认配置将转向
?page=0&size=10
Pageable
由10个页面大小请求的第一页。

PageableResourcesAssembler
让你轻松转
Page
成一个
PagedResources
实例。它将不仅将页面元数据添加到响应中,还将根据您访问的页面以及如何
Pageable
配置分辨率将适当的链接添加到表示中。

为JPA启用此功能的示例JavaConfig配置如下所示:

@Configuration@EnableWebMvc@EnableSpringDataWebSupport@EnableJpaRepositoriesclass ApplicationConfig {  // declare infrastructure components like EntityManagerFactory etc. here}
样本请求和响应

假设

Persons
数据库中有30个。现在,您可以触发一个请求
GEThttp://localhost:8080/persons
,您将看到类似以下内容:

{ "links" : [    { "rel" : "next", "href" : "http://localhost:8080/persons?page=1&size=20 }  ],  "content" : [    … // 20 Person instances rendered here  ],  "pagemetadata" : {    "size" : 20,    "totalElements" : 30,    "totalPages" : 2,    "number" : 0  }}

请注意,汇编器生成了正确的URI,并且还采用了当前的默认配置来将参数解析

Pageable
为即将到来的请求。这意味着,如果您更改该配置,则链接将自动遵守更改。默认情况下,汇编器指向调用该方法的控制器方法,但可以通过传递一个自定义
link
来对其进行自定义,该自定义用作构建该
PagedResourcesAssembler.toResource(…)
方法重载的分页链接的基础。

外表

这些

PagedResourcesAssembler
位将在Spring Data Babbage
发布系列的即将发布的里程碑版本中提供。当前快照中已提供该功能。您可以在我的Spring RESTBucks
示例应用程序中看到一个有效的示例。只需将其克隆,运行
mvnjetty:run
并卷曲即可
http://localhost:8080/pages



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5621775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存