Spring MVC validation не работает. Как сделать?

Не могу сделать валидацию в spring mvc. Два дня бьюсь и без безрезультатно.

Это весь мой проект
Изображение IDE

5e9812da85181385157407.png


Вот мой юзер
User

package com.springfreemarkerform;


import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {


    @NotNull
    @NotEmpty
    @Size(min = 1, max = 2)
    private String username;



    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    
}



А это мой мой контроллер
FormController

package com.springfreemarkerform;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;

@Controller
public class FormController {


    @GetMapping("/")
    public String home() {
        return "redirect:/form";
    }




    @GetMapping("/form")
    public String getForm (Model model) {

        model.addAttribute("user", new User());
        return "/form";

    }




    @PostMapping("/form")
    public String postForm(@Valid User user, BindingResult result) {

        if (result.hasErrors()) {
            return "/error";
        }
        return "/good";
    }


}



И вот HTML страница
form

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Форма</title>
</head>
<body>


<form action="/form" method="POST" name="user">

    <input type="text" name="username" >
    <button type="submit">submit</button>

</form>


</body>
</html>



А это pom.xml
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.springfreemarkerform</groupId>
    <artifactId>SpringFreemarkerForm</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${encoding}</encoding>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <java.version>1.8</java.version>
        <encoding>UTF-8</encoding>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>



        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.1.2.Final</version>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.29</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

    </dependencies>

</project>



И дальше настроечные java классы, так как я не использую xml настройки.

Это ServletInit
ServletInit

package com.springfreemarkerform;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletInitSakh extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { FreeMarkerConfigSakh.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}



А это FreeMarkerConfig
FreeMarkerConfig

package com.springfreemarkerform;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;

import java.util.Properties;

@Configuration
@ComponentScan("com.springfreemarkerform")
public class FreeMarkerConfigSakh {

    @Bean
    public FreeMarkerConfigurer freeMarkerConfigurer() {
        FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
        configurer.setTemplateLoaderPath("/WEB-INF/templates");
        configurer.setDefaultEncoding("UTF-8");
        configurer.setFreemarkerSettings(new Properties() {{
            put("default_encoding", "UTF-8");
        }});
        return configurer;
    }

    @Bean
    public ViewResolver getViewResolver(){
        FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
        viewResolver.setSuffix(".ftl");
        viewResolver.setContentType("text/html;charset=UTF-8");
        viewResolver.setCache(false);
        return viewResolver;
    }
}



Как я понимаю, если я указываю в input не корректное значение, ну например оставляю пустым или указываю больше двух знаков и отправляю эту форму, то должно произойти то самое чудо, то есть, значение из формы, а именно поле surname, не должно попасть в поле surname которое находится в классе User. И BindingResult который находится в контроллере в методе postForm, должен сообщить что что не так. Но этот BindingResult молчит как рыба, и из-за этого у меня ничего не работает.
То есть, кратко и просто. Если я указываю не корректное значение, то мне постоянно возвращает одну и туже страницу good а должно возвращать error если не корректные данные.
  • Вопрос задан
  • 1561 просмотр
Решения вопроса 1
Favorskij
@Favorskij Автор вопроса
Вопрос решён. Необходимо в RootConfig указать @EnableWebMvc тем самым активировать WebMvc
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы