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";
     }
[...]