Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在表单输入中仅将长数字作为字符串写入?_Java_Spring Boot_Hibernate_Thymeleaf - Fatal编程技术网

Java 如何在表单输入中仅将长数字作为字符串写入?

Java 如何在表单输入中仅将长数字作为字符串写入?,java,spring-boot,hibernate,thymeleaf,Java,Spring Boot,Hibernate,Thymeleaf,我正在使用SpringDataJPA在SpringBoot中注册。我在表单字段中放置长值时遇到了一个问题 模型类:我在私有长nsuID之前使用了@NotBlank注释,但是当表单重定向时,nsuID字段已填充0 @Entity @Table(name="alumnies",uniqueConstraints = @UniqueConstraint(columnNames = "email") ) public class Alumni { @Id

我正在使用SpringDataJPA在SpringBoot中注册。我在表单字段中放置长值时遇到了一个问题

模型类:我在
私有长nsuID
之前使用了
@NotBlank
注释,但是当表单重定向时,
nsuID
字段已填充0

@Entity
@Table(name="alumnies",uniqueConstraints = @UniqueConstraint(columnNames = "email") )
public class Alumni {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name="NSU_ID")
    @NotBlank
    private long nsuID;
    
    public long getNsuID() {
        return nsuID;
    }
    public void setNsuID(long nsuID) {
        this.nsuID = nsuID;
    }
    
}
HTML文件:

<div class="form-group"
    th:classappend="${#fields.hasErrors('nsuID')}? 'has-error':''">
    <label for="nsuID" class="control-label">NSU ID</label> <input
       id="nsuID" class="form-control" th:field="*{nsuID}" />
       <p class="error-message"
       th:each="error : ${#fields.errors('nsuID')}"
       th:text="${error}">Validation error</p>
     </div>
@Controller
public class RegistraionController {
    @Autowired
    private UserService us;
    
    @GetMapping("/")
    public String showRegistration(Model model) {
        Alumni alumni = new Alumni();
        model.addAttribute("alumni", alumni);
        return "registration";
    }
    
    @PostMapping("/registration")
    public String saveAlumni(@ModelAttribute("alumni") @Validated Alumni alumni, BindingResult bindingResult) {
        
        Alumni existing = us.findByEmail(alumni.getEmail());
        if (existing != null) {
            bindingResult.rejectValue("email", null, "There is already an account registered with that email");
        }
        
        if (bindingResult.hasErrors()) {
             return "registration";
          }
        us.saveAlumni(alumni);
        return "redirect:/";
    }
    

}

long无法保存空值,因此它可能正在转换为0。尝试将其更改为Long(包装器类)


正如@Dip Halani所说,long类型变量不能包含null值,因为它是原始类型变量,long类型变量的默认值为0

而您对
nsuID
@NotBlank
约束是错误的,因为它检查字符序列的修剪长度是否为空,它通常用于验证给定字符串值必须不为null,并且修剪长度必须大于零

如果要验证非空值,请使用
@NotNull
并将
long nsuID
替换为
long nsuID

@NotBlank 
private Long nsuID;