2017-11-23 22 views
1

@Validatedアノテーションを使用してコントローラに返された有効なフォームデータを取得しようとしていますが、作成したカスタムバリデータを呼び出すことができません。以下のコード:私は自動配線私のクラスと、次のコードを使用してバリデータを初期化しています@Validatedアノテーションが機能しない

@PostMapping("/saveTransaction") 
    public String saveTransaction(@ModelAttribute("transaction") Transactions transaction, BindingResult bindingResult) { 
     validator.validate(transaction, bindingResult); 
     if(bindingResult.hasErrors()) { 
      System.out.println("Non formated form stuff."); 
      return "transactions/transactionsForm"; 
     } 

:I手動コールValidatorの場合のように

@PostMapping("/saveTransaction") 
    public String saveTransaction(@ModelAttribute("transaction") 
@Validated Transactions transaction, BindingResult bindingResult) { 

    if(bindingResult.hasErrors()) { 
     System.out.println("Non formated form stuff."); 
     return "transactions/transactionsForm"; 
    } 

コードが動作します。

@Autowired 
    private TransactionService transactionService; 

    @Autowired 
    @Qualifier("transactionValidator") 
    private Validator validator; 

    @InitBinder 
    private void initBinder(WebDataBinder binder) { 
     binder.setValidator(validator); 
    } 

I have the following code in Spring.xml file: 

    <mvc:annotation-driven validator="transactionValidator" /> 

    <bean id="transactionValidator" class="org.lexusmanson.lexbudget.validator.TransactionValidator" /> 

私の現在の依存関係は、以下のとおりです。

<properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.9</java.version> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
     <spring.version>5.0.1.RELEASE</spring.version> 
     <hibernate.version>5.2.11.Final</hibernate.version> 
     <hibernate.validator>5.4.1.Final</hibernate.validator> 
     <c3p0.version>0.9.5.2</c3p0.version> 
     <jstl.version>1.2.1</jstl.version> 
     <tld.version>1.1.2</tld.version> 
     <servlets.version>3.1.0</servlets.version> 
     <jsp.version>2.3.1</jsp.version> 
     <hsqldb.version>1.8.0.10</hsqldb.version> 
     <aspectj.version>1.8.13</aspectj.version> 
    </properties> 

    <dependencies> 
     <!-- Spring MVC Dependency --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <!-- Spring ORM --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <!-- Hibernate Core --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 

     <!-- Hibernate-C3P0 Integration --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-c3p0</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 

     <!-- c3p0 --> 
     <dependency> 
      <groupId>com.mchange</groupId> 
      <artifactId>c3p0</artifactId> 
      <version>${c3p0.version}</version> 
     </dependency> 

     <!-- Hibernate Validator --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>${hibernate.validator}</version> 
     </dependency> 

     <!-- JSTL Dependency --> 
     <dependency> 
      <groupId>javax.servlet.jsp.jstl</groupId> 
      <artifactId>javax.servlet.jsp.jstl-api</artifactId> 
      <version>${jstl.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>taglibs</groupId> 
      <artifactId>standard</artifactId> 
      <version>${tld.version}</version> 
     </dependency> 

     <!-- Servlet Dependency --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>${servlets.version}</version> 
      <scope>provided</scope> 
     </dependency> 

     <!-- JSP Dependency --> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>javax.servlet.jsp-api</artifactId> 
      <version>${jsp.version}</version> 
      <scope>provided</scope> 
     </dependency> 

     <!-- HSQL Dependency --> 
     <dependency> 
      <groupId>hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <version>${hsqldb.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mariadb.jdbc</groupId> 
      <artifactId>mariadb-java-client</artifactId> 
      <version>2.2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tiles</groupId> 
      <artifactId>tiles-extras</artifactId> 
      <version>3.0.8</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${aspectj.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjweaver</artifactId> 
      <version>${aspectj.version}</version> 
     </dependency> 
    </dependencies> 

なぜ注釈は私の検証コードを呼び出していないのだろうか?

+0

後に来る必要があります。上記の例では動作しません。全く何が間違っているのか分からない。 –

答えて

1

変更以下に述べるように、コード:バインディングの結果は、私は別のクラスに検証を追加しようとしましたし、正常に動作するようです@Valid注釈

@PostMapping("/saveTransaction") 
    public String saveTransaction(@Valid Transactions transaction, BindingResult bindingResult) { 
     validator.validate(transaction, bindingResult); 
     if(bindingResult.hasErrors()) { 
      System.out.println("Non formated form stuff."); 
      return "transactions/transactionsForm"; 
     } 
+0

この回答はうまくいきますが、アプリケーションで別の場所で作業するために使用したスタイルが得られているので、どうしたらうまくいかないのか分かりません。 –

2

@validatedの代わりに@validアノテーションを使用してみることができますか?

+0

@Validを使って疲れましたが、うまくいきませんでした。 –

+1

モデルアトリビュートの前に有効な注釈を付けることができます –

+0

ええ、それもうんざりです。 –

0

1:既に

を追加していない場合、依存関係の下に追加
<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>2.0.0.Final</version> 
</dependency> 

2:代わりに@Validated注釈の使用@Valid注釈

3:のようなユーザー豆取引におけるいくつかの検証制約を@ NotEmpty、@ NOTNULLなど

あなたのためにうまくいくはずです。

関連する問題