2017-11-23 1 views
1

Ich versuche, die @Validated-Annotation zu gültigen Formulardaten zu verwenden, die an einen Controller zurückgegeben werden, aber es kann den benutzerdefinierten Validator, den ich erstellt habe, nicht aufrufen. Code unten:@Validated-Annotation funktioniert nicht

@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"; 
    } 

Der Code funktioniert, wenn ich manuellen Aufruf des Validator wie in:

@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"; 
     } 

ich meine Auto-Verkabelung Klasse bin und den Validator initialisiert den folgenden Code verwenden.

@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" /> 

Meine aktuellen Abhängigkeiten sind:

<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> 

Warum wird nicht die Anmerkung meines Validierungscode nennen?

+0

Ich habe versucht, die Validierung in einer anderen Klasse hinzuzufügen, und es scheint, dass es gut zu funktionieren. Trotzdem kann es das obige Beispiel nicht schaffen. Ich weiß überhaupt nicht, was los ist. –

Antwort

1

ändern Sie den Code wie unten erwähnt: Bindungs ​​Ergebnis soll nach @Valid Annotation kommt

@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

Diese Antwort funktioniert, aber ich habe den Stil, den ich in der Frage verwendet habe, an anderer Stelle in meiner Anwendung verwendet, daher bin ich mir nicht sicher, was schief läuft. –

2

Können Sie versuchen, mit @valid Annotation statt @validated hoffe, es wird Ihnen helfen.

+0

Ich müde mit @Valid, aber es hat nicht funktioniert. –

+1

Können Sie, indem Sie gültige Annotation vor Modellattribut –

+0

Ja, ich habe auch diese müde. –

0

1: unten Abhängigkeit hinzufügen, wenn nicht bereits

hinzugefügt
<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>2.0.0.Final</version> 
</dependency> 

2: Verwenden Sie @Valid Annotation statt @Validated Anmerkung

3: Benutzer einige Validierung Einschränkungen in bean Transaktionen wie @ NotEmpty, @ NotNull usw.

Ich hoffe, es sollte für Sie arbeiten.