2015-02-24 18 views
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永遠不會被調用。我還需要做些什麼才能調用?

+0

爲什麼要創建自己的... Spring已經爲你提供了這個功能,你只需要在你的配置中註冊'MethodValidationPostProcessor'來啓用它。默認情況下,它只檢測來自Spring的'@ Validated'註解,但你可以告訴它使用'@ Valid'註解來代替。 – 2015-02-25 07:54:11

回答

0

自Spring 3.1以來,有MethodValidationInterceptor這基本上做你想達到你自己。要使用此攔截器,您唯一需要做的就是在應用程序上下文中註冊一個MethodValidationPostProcessor

默認情況下,它將檢查Spring的@Validated註釋,但您可以指示它掃描@Valid註釋。

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"> 
    <property name="validatedAnnotationType" value="javax.validation.Valid" /> 
    <property name="validator" ref="refToYOurLocalValidatorFactoryBean" /> 
</bean> 

如果不指定validator默認JSR-303的驗證機制將被用於(或更具體的休眠之一,如果可用)。但我可以想象你想重用已經配置的實例。

相關問題