diff --git a/rules/S7186/java/metadata.json b/rules/S7186/java/metadata.json new file mode 100644 index 00000000000..96da31f7922 --- /dev/null +++ b/rules/S7186/java/metadata.json @@ -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" + } +} diff --git a/rules/S7186/java/rule.adoc b/rules/S7186/java/rule.adoc new file mode 100644 index 00000000000..8d15538be3b --- /dev/null +++ b/rules/S7186/java/rule.adoc @@ -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 findItems() { //non compliant, no Pageable parameter + // query +} +---- + +==== Compliant solution + +[source,java,diff-id=1,diff-type=compliant] +---- +public Page 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] + diff --git a/rules/S7186/metadata.json b/rules/S7186/metadata.json new file mode 100644 index 00000000000..2c63c085104 --- /dev/null +++ b/rules/S7186/metadata.json @@ -0,0 +1,2 @@ +{ +}