grails-cache
grails-cache copied to clipboard
Fix: Ignore @Cacheable Annotation on Controller Methods
Related Issue: This PR addresses the issue described in https://github.com/grails/grails-cache/issues/168
Summary
This PR addresses an issue where the @Cacheable annotation on controller methods does not behave as expected in plugin version 4.0.0. Instead of ignoring the annotation, the method is executed only the first time as if it were being cached, causing inconsistencies when the controller action receives parameters.
Solution
To solve this issue, I have modified the buildDelegatingMethodCall method to check if the class is a controller and not a service. If it is a controller, the original method call is returned, effectively ignoring the @Cacheable annotation.
Here is the relevant code snippet:
@Override
protected Expression buildDelegatingMethodCall(SourceUnit sourceUnit, AnnotationNode annotationNode, ClassNode classNode, MethodNode methodNode, MethodCallExpression originalMethodCallExpr, BlockStatement newMethodBody) {
boolean isControllerClass = classNode.name.endsWith("Controller")
boolean isServiceClass = classNode.name.endsWith("Service")
if (isControllerClass && !isServiceClass) {
return originalMethodCallExpr
}
// Existing logic for handling caching
}
Reason for Targeting the 4.x Branch I am submitting this change to the 4.x branch because I encountered this issue when migrating from Grails 2.5.6 to Grails 3.3.11, where I started using version 4 of the cache plugin.
At this time, we're not back porting changes unless there's a strong need. Given that people could just remove the annotation, I'm going to close this out since it's been pulled forward via https://github.com/grails/grails-cache/pull/230