【问题标题】:Spring Data JPA Page and JSON with Gson带有 Gson 的 Spring Data JPA 页面和 JSON
【发布时间】:2018-12-25 13:06:43
【问题描述】:

我使用带有依赖项的xml配置的spring mvc:

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.12</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.9.12</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.12</version>
    </dependency>

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.4</version>
    </dependency>

转换为 JSON。但是使用 Spring data JPA Page 结果是空的: {}。使用存储库:

@Repository("personRepository")
public interface PersonRepository extends CrudRepository<Person, Long> {

    Page<Person> findAll(Pageable pageable);

}

和控制器:

@RestController
public class ApiController {

    @Autowired
    PersonService personService;

    @GetMapping(value = {"/api/person/getpage"}, produces = {"application/json"})
    public Page<Person> getPerson() {
        return personService.findAll(new PageRequest(0, 10));
    }
}

谁能告诉我如何将正确的数据返回到格式:

{ "totalPages":501,
"totalElements":5001,
"size":10,
"content":[{"id":1,"firstName":"Joe","lastName":"Doe"}, 
           {"id":2,"firstName":"Mich","lastName":"Jogger"}, 
           {"id":3,"firstName":"Santa","lastName":"Close"}, ...],
"number":0,
"numberOfElements":10,
"sort":null,
"last":false,
"first":true}

【问题讨论】:

  • 你需要将你的存储库接口切换到 PagingAndSortingRepository 或 JpaRepository,它们有内置的 Page findAll(Pageable pageable);
  • 我已尝试将您的存储库界面切换到 PagingAndSortingRepository 或 JpaRepository。但结果仍然是:{}

标签: java json spring spring-mvc spring-data-jpa


【解决方案1】:

您必须在控制器中将返回类型更改为List&lt;Person&gt;。我可以在 db 中看到 5001 条记录。示例控制器代码,

@GetMapping(value = {"/api/person/getpage"}, produces = {"application/json"})
public List<Person> getPerson() {
    Page<Person> pagePersonList = personService.findAll(new PageRequest(0, 10));
    List<Person> personList = pagePersonList.getContent();
    return personList;
}

如果有任何问题或疑问,请告诉我。

【讨论】:

  • 我想返回 Page 类型以在智能表中使用 angularjs 进行分页。
  • 如果您不想更改返回类型,我不熟悉 angular/smart 表创建一个具有相同签名的自定义实体并使用 setter 将该 personList 放入内容中并在 angular 中使用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2021-11-09
  • 1970-01-01
  • 2013-09-15
  • 2015-06-17
  • 2021-05-28
  • 2020-05-20
相关资源
最近更新 更多