Ограничение @NotNull не работает в Spring Boot - PullRequest
0 голосов
/ 04 ноября 2018

Я использую Spring Boot, а @NotNull не работает. Если значение имени не указано, функция работает нормально.

@Entity
public class Employee  implements Serializable{
    @Id
    //@GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    //@Id
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }

    @NotNull  // not working
    private String name;
    private String phone;
}

контроллер

@Controller
public class URLController {
    @Autowired
    EmployeeServiceImpl empService;

    @GetMapping({"/", "/index"})
    public String index1(Model model){
        model.addAttribute("employee",new Employee());
        return "index";
    }

    @PostMapping("/result")
    public String result(@Valid @ModelAttribute Employee employee){
        System.out.print(employee.getName()); 
        empService.save(employee);
        return "result"; 
    }
}

pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.springs</groupId>
<artifactId>springs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>springs</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>


    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Я использую атрибут модели, чтобы получить объект сотрудника. файл pom.xml содержит зависимость средства проверки гибернации.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Попробуйте изменить метод, как показано ниже, чтобы проверить подробности ошибок.

@PostMapping("/result")
    public String result(@Valid @ModelAttribute("employee") Employee employee, BindingResult bindingResult){
        List<FieldError> errors = bindingResult.getFieldErrors();
        for (FieldError error : errors ) {
         System.out.println (error.getObjectName() + " - " +error.getDefaultMessage());
        }
        System.out.print(employee.getName()); 
        empService.save(employee);
        return "result"; 
    }

Если нет ошибки в bindingResult, обратитесь к notnull-constraint-not-working для дальнейшего устранения неполадок.

0 голосов
/ 04 ноября 2018

вы должны добавить аннотацию @Valid в части отображения в вашем коде, например

void addEmployee(@Valid Employee emp);

используя этот импорт "import javax.validation.Valid;"

Еще одно примечание, если вы хотите проверить список, вы должны сделать список оболочки Нравится

public class ValidList<E> implements List<E> {

@Valid
private List<E> list;}

И переопределить все методы в нем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...