Tôi đang cố gắng lấy các đối số của một phương thức bộ điều khiển grails bằng cách sử dụng chú thích và một Aspect thực thi trước phương thức. Trình xử lý khía cạnh thực thi chính xác nhưng tôi không thể truy cập đối số (thực hiện grails.validation.Validateable
) danh sách đối số trống.Grails 3.0.11 Chú thích AOP để xử lý trước commandObjects trước các phương thức Controller
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
}
}
tôi nhận được đầu ra sau, có nghĩa là phương pháp xử lý khía cạnh chạy trước khi phương pháp điều khiển nhưng nó không có được các đối số.
parameters []
Validated
Điều đó có nghĩa là cả hai phương pháp đều sẽ được chú thích? Tôi biết về những kẻ đánh chặn, chúng rất tuyệt nhưng không phải thứ tôi muốn sử dụng cho việc này. – Evan
Không, nó được sử dụng để đánh dấu các hành động có thể gọi - các phương pháp đã gõ có hiệu quả không công khai –
Tuyệt vời :( Nhưng điều đó có nghĩa là nếu tôi muốn ghi lại thời lượng của hành động bằng cách sử dụng chú thích Arround, tôi sẽ chỉ đếm thời gian Để thực hiện phương pháp no-arg – Evan