grails-cache
grails-cache copied to clipboard
Fix: Ignore @Cacheable Annotation on Controller Methods
I have reviewed and confirmed that this problem also occurs in version 7 of the plugin. 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 the plugin since 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
}