SONARJAVA-5288 Create rule S7186: Methods returning "Page" or "Slice" must take "Pageable" as an input parameter (#4620)
This commit is contained in:
parent
5e12d3beff
commit
d873f6b135
26
rules/S7186/java/metadata.json
Normal file
26
rules/S7186/java/metadata.json
Normal 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"
|
||||
}
|
||||
}
|
41
rules/S7186/java/rule.adoc
Normal file
41
rules/S7186/java/rule.adoc
Normal 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]
|
||||
|
2
rules/S7186/metadata.json
Normal file
2
rules/S7186/metadata.json
Normal file
@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user