Skip to content

Commit

Permalink
SONARJAVA-5288 Create rule S7186: Methods returning "Page" or "Slice"…
Browse files Browse the repository at this point in the history
… must take "Pageable" as an input parameter (#4620)
  • Loading branch information
github-actions[bot] authored Jan 28, 2025
1 parent 5e12d3b commit d873f6b
Showing 3 changed files with 69 additions and 0 deletions.
26 changes: 26 additions & 0 deletions rules/S7186/java/metadata.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
41 changes: 41 additions & 0 deletions rules/S7186/java/rule.adoc
Original file line number Diff line number Diff line change
@@ -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]

2 changes: 2 additions & 0 deletions rules/S7186/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}

0 comments on commit d873f6b

Please sign in to comment.