SONARJAVA-5288 Create rule S7186: Methods returning "Page" or "Slice" must take "Pageable" as an input parameter (#4620)

This commit is contained in:
github-actions[bot] 2025-01-28 16:36:02 +01:00 committed by GitHub
parent 5e12d3beff
commit d873f6b135
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 69 additions and 0 deletions

View File

@ -0,0 +1,26 @@
{
"title": "Methods returning \"Page\" or \"Slice\" must take \"Pageable\" as an input parameter",
"type": "CODE_SMELL",
"status": "ready",
"remediation": {
"func": "Constant\/Issue",
"constantCost": "5min"
},
"tags": [
"spring"
],
"defaultSeverity": "Major",
"ruleSpecification": "RSPEC-7186",
"sqKey": "S7186",
"scope": "All",
"defaultQualityProfiles": ["Sonar way"],
"quickfix": "unknown",
"code": {
"impacts": {
"MAINTAINABILITY": "LOW",
"RELIABILITY": "HIGH",
"SECURITY": "LOW"
},
"attribute": "CONVENTIONAL"
}
}

View File

@ -0,0 +1,41 @@
== Why is this an issue?
Spring Data Repository supports paging for queries, allowing you to return results in small, manageable chunks rather than retrieving an entire large result set.
The conventional approach to paginating data in Spring is to use the `Pageable` interface to control pagination and to store the query results into a `Page` or `Slice`.
If a query method in a `Repository` returns a `Page` or `Slice` without taking a `Pageable` as an input, it raises a runtime exception.
This rule raises an issue on queries in a `Repository` that return a `Page` or `Slice` without taking a `Pageable` as an input.
== How to fix it
Ensure that query methods returning a `Page` or `Slice` include a `Pageable` parameter in their method signature.
=== Code examples
==== Noncompliant code example
[source,java,diff-id=1,diff-type=noncompliant]
----
public Page<Item> findItems() { //non compliant, no Pageable parameter
// query
}
----
==== Compliant solution
[source,java,diff-id=1,diff-type=compliant]
----
public Page<Item> findItems(Pageable pageable) {
// query
}
----
== Resources
=== Documentation
* Spring - https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html[JPA Query Methods]
* Spring - https://docs.spring.io/spring-data/jpa/reference/repositories/query-methods-details.html#repositories.paging-and-sorting[Defining Query Methods]
=== Articles & blog posts
* Spring Guides - https://reflectoring.io/spring-boot-paging/[Paging with Spring Boot]

View File

@ -0,0 +1,2 @@
{
}