0
我們使用Spring 3.2.11.RELEASE和Maven 3.0.3。我試圖建立一個參數傳遞到服務方法的驗證。方法如下。注意@Valid
註釋。如何讓我的Spring Aspect在服務方法中使用@Valid註解?
package org.mainco.subco.mypck.service;
@Service
@RemoteProxy
@Transactional
public class MypckServiceImpl implements MypckService {
@RemoteMethod
@Override
public String myMethod(@Valid final MyObjectDto request) {
// ...
}
}
這裏是我已成立,以幫助驗證對象方面:
@Aspect
@Component
public class MyObjectValidatingAspect extends AbstractDWRAspectValidator<MyObjectDto>
{
@Before("execution(* org.mainco.subco.mypck.service.MypckService.myMethod(..))")
public void validateBefore(JoinPoint jp)
{
errors = new ArrayList<String>();
final MyObjectDto request = validate(jp);
validateMyObject(request);
throwErrors();
} // validateBefore
這是包含在我的應用程序上下文文件:
<global-method-security pre-post-annotations="enabled">
</global-method-security>
<aop:aspectj-autoproxy/>
而這就是我已包含在Maven pom.xml文件中:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.2</version>
</dependency>
不幸的是,當調用方法時,aspectj的validateBefore
永遠不會被調用。我還需要做些什麼才能調用?
爲什麼要創建自己的... Spring已經爲你提供了這個功能,你只需要在你的配置中註冊'MethodValidationPostProcessor'來啓用它。默認情況下,它只檢測來自Spring的'@ Validated'註解,但你可以告訴它使用'@ Valid'註解來代替。 – 2015-02-25 07:54:11