使用具有未在数据库中持久化的类的验证器

时间:2017-09-01 19:20:43

标签: spring-mvc spring-boot spring-data spring-data-jpa thymeleaf

作为我使用Spring Boot构建的网站的一部分,我通过Thymeleaf表单接收输入。为了验证输入,我创建了一个类并注释了它的字段:

package com.bank.domain;

import java.util.Date;
import javax.persistence.Column;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class NewClass {

    //if record is active/inactive (hidden)
    @Column
    private boolean active=true;

    //bank of account holder
    @NotNull
    @Size(min = 2, max =3)
    private String banknum;

    //branch
    @NotNull
    @Size(min = 1, max =3)
    private String branchnum;

    // account number
    @NotNull
    @Size(min = 4, max =10)
    private String accountnum;

    // number / range of numbers of Check
    @NotNull
    @Digits(integer=9, fraction=0)
    @Column(columnDefinition = "UNSIGNED INT(9) not null",nullable=false)
    private String fromchecknum;

    // number / range of numbers of Check
    @NotNull
    @Digits(integer=9, fraction=0)
    @Column(columnDefinition = "UNSIGNED INT(9) not null",nullable=false)
    private String tochecknum;
}

因为我打开了调试,我看到sql输出被转储到日志中,即使数据库中没有此类的表。 我不想在SQL查询或其他任何内容上浪费资源,因为没有基础表,只有一个包含验证器的字段的类。

所以我的问题是 - 是否可以只使用常规类并使用各种注释,例如@Size@Min@NotNull@Digits等?

1 个答案:

答案 0 :(得分:1)

看着你的课,似乎System.out.println(people[1].job); 的使用是唯一涉及持久性的事情。你想要那个注释吗?如果查看包结构,System.out.println(((Employee) people[1]).job); 是持久性包,验证相关的注释位于@Column而不是持久性包中。 即使您的bean不是@column,也可以使用像javax.validation之类的Bean验证(JSR303)等。我想那是你的问题,对吗?