Java 为什么@Size验证器需要使用Spring的非空值?编辑:这不是由于空的要求
我知道Java 为什么@Size验证器需要使用Spring的非空值?编辑:这不是由于空的要求,java,spring,Java,Spring,我知道@Size并不意味着值不为null。 但是在这个项目中,当我试图提交一个空值时,如果我用@Size(min,max)注释属性,它将作为@NotNull 表格如下: Jsp表单: <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%
@Size
并不意味着值不为null
。
但是在这个项目中,当我试图提交一个空值时,如果我用@Size(min,max)
注释属性,它将作为@NotNull
表格如下:
Jsp表单:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
[...]
<form:form commandName="colloquioRicerca" action="colloquio_ricerca" method="post">
<fieldset>
<legend>Cerca un colloquio</legend>
<p class="errorLine">
<form:errors path="codiceFiscale" cssClass="error"/>
</p>
<label for="codiceFiscale">Codice Fiscale del Docente: </label>
<br>
<form:input id="codiceFiscale" path="codiceFiscale" tabindex="1"/>
[...]
控制器类:
[...]
@RequestMapping(value="colloquio_ricerca")
public String cerca(@Valid @ModelAttribute ColloquioSearch colloquioRicerca, BindingResult br, Model model){
logger.info("entered");
if (br.hasErrors()) {
FieldError fieldError = br.getFieldError();
logger.info("Code:" + fieldError.getCode() + ", object:"
+ fieldError.getObjectName() + ", field:"
+ fieldError.getField());
model.addAttribute("colloquioRicerca", colloquioRicerca);
return "ColloquioSearchForm";
}
[...]
通过这种方式设置,它不接受表单中的空值,我需要删除@Size
约束以使其正常工作,但我找不到问题出在哪里
编辑16.06:
我检查了参数是否为null
,它不是作为null
对象传递的,而是作为空字符串传递的,即使在提交之前没有在输入字段中单击。
当Spring构建对象时,这个参数的使用是否会产生问题?因为我读到使用this
永远不会传递null
值。
感谢您的帮助,关于要阅读的文档或我写的错误的任何进一步信息都会被接受。您确定它是null
?可能控制器接收到一个空字符串。这也可能来自您的ObjectMapper。@SJuan76是的,我只是单击“提交”而不触摸任何输入field@AlexCiocan我没有配置任何对象映射器,我不知道Spring是否有默认的对象映射器(实际上我根本不知道什么是对象映射器)这并不取决于你做什么,而是Spring如何解释一个空字段。在不使用@Size
的情况下运行程序,并在提交表单后记录属性值。
[...]
@RequestMapping(value="colloquio_ricerca")
public String cerca(@Valid @ModelAttribute ColloquioSearch colloquioRicerca, BindingResult br, Model model){
logger.info("entered");
if (br.hasErrors()) {
FieldError fieldError = br.getFieldError();
logger.info("Code:" + fieldError.getCode() + ", object:"
+ fieldError.getObjectName() + ", field:"
+ fieldError.getField());
model.addAttribute("colloquioRicerca", colloquioRicerca);
return "ColloquioSearchForm";
}
[...]