मैं एक एनोटेशन और एक पहलू का उपयोग करके एक अंगूर नियंत्रक विधि के तर्कों को पुनर्प्राप्त करने का प्रयास कर रहा हूं जो विधि से पहले निष्पादित करता है। पहलू हैंडलर सही ढंग से निष्पादित करता है लेकिन मैं तर्क का उपयोग नहीं कर सकता (जो grails.validation.Validateable
लागू करता है) तर्कों की सूची खाली है।Grails 3.0.11 प्रीप्रोसेस कमांड के लिए एओपी एनोटेशन कंट्रोलर विधियों से पहले ऑब्जेक्ट्स
experiment.aspect.validated
package experiment.aspect
import java.lang.annotation.ElementType
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
import java.lang.annotation.Target
/**
* Created by Vaggelis on 10/13/2016.
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface Validated {
}
experiment.aspect.ValidatedAspect
package experiment.aspect
import grails.validation.ValidationException
import org.aspectj.lang.JoinPoint
import org.aspectj.lang.annotation.Aspect
import org.aspectj.lang.annotation.Before
/**
* Created by Vaggelis on 10/13/2016.
*/
@Aspect
class ValidatedAspect {
@Before("@annotation(experiment.aspect.Validated)")
public void preValidate(JoinPoint point) throws ValidationException{
println "parameters ${point.getArgs()}"
}
}
conf.spring.resources
import experiment.aspect.ValidatedAspect
// Place your Spring DSL code here
beans = {
validatedAspect(ValidatedAspect)
}
controllers.experiment.TestController
package experiment
import experiment.aspect.Validated
class TestController extends BaseController {
static responseFormats = ['json']
@Validated
def login(LoginCommand loginCommand){
println "Validated"
...
}
}
experiment.LoginCommand
package experiment
/**
* Created by Vaggelis on 9/14/2016.
*/
import grails.validation.Validateable
class LoginCommand implements Validateable {
// String id
String name
static constraints = {
name blank: false
}
}
मैं निम्नलिखित उत्पादन, जिसका अर्थ है कि पहलू हैंडलर विधि नियंत्रक विधि से पहले चलाता है, लेकिन यह नहीं मिलता है तर्क
parameters []
Validated
क्या इसका मतलब यह नहीं होगा कि दोनों विधियों को एनोटेट किया जाएगा? मैं इंटरसेप्टर के बारे में जानता हूं, वे शांत हैं लेकिन मैं इसके लिए उपयोग नहीं करना चाहता हूं। – Evan
नहीं, इसका उपयोग कॉल करने योग्य कार्यों को चिह्नित करने के लिए किया जाता है - टाइप की गई विधियां प्रभावी रूप से गैर-सार्वजनिक –
ग्रेट :( लेकिन इसका मतलब है कि अगर मैं एराउंड एनोटेशन का उपयोग करके कार्रवाई की अवधि लॉग करना चाहता था, तो मैं केवल समय की गणना करता नो-एर्ग विधि के निष्पादन के लिए। – Evan