Java 验证器的目标无效-Spring MVC

Java 验证器的目标无效-Spring MVC,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我在春季验证时遇到问题。打开表单后出现以下错误: java.lang.IllegalStateException: Invalid target for Validator [com.example.validator.UserValidator@6ac0a8f4]: com.example.web.forms.UserDTO@4d3b2379 目前,我的验证器想先检查是否有任何功能: @Component public class UserValidator implements Valid

我在春季验证时遇到问题。打开表单后出现以下错误:

java.lang.IllegalStateException: Invalid target for Validator [com.example.validator.UserValidator@6ac0a8f4]: com.example.web.forms.UserDTO@4d3b2379
目前,我的验证器想先检查是否有任何功能:

@Component
public class UserValidator implements Validator {

    @Autowired
    ServiceUser serviceUser;

    @Override
    public boolean supports(Class<?> clazz) {
        return User.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {

        User user = (User) target;

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "NotEmpty.userForm.name");

    }

}
jsp中的表单:

<form:form action="dodaj" method="POST" modelAttribute="userDto">
        <table border="1">
            <tbody>
            <tr>
                <th>Imię</th>
                <td>
                    <form:input type="text" path="name" />
                    <c:if test="${pageContext.request.method=='POST'}"><form:errors path="name" /></c:if>
                </td>
            </tr>
            <tr>
                <th>Nazwisko</th>
                <td>
                    <form:input type="text" path="surname" />
                    <c:if test="${pageContext.request.method=='POST'}"><form:errors path="surname" /></c:if>
                </td>
            </tr>
            <tr>
                <th>DataUrodzenia</th>
                <td>
                    <form:input type="date" path="dateOfBirth" />
                    <c:if test="${pageContext.request.method=='POST'}"><form:errors path="dateOfBirth" /></c:if>
                </td>
            </tr>
            <tr>
                <th>NumerIndeksu</th>
                <td>
                    <form:input type="number" path="indexNumber" />
                    <c:if test="${pageContext.request.method=='POST'}"><form:errors path="indexNumber" /></c:if>
                </td>
            </tr>
            <tr>
                <th>Email</th>
                <td>
                    <form:input type="text" path="email" />
                    <c:if test="${pageContext.request.method=='POST'}"><form:errors path="email" /></c:if>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="right"><input type="submit" value="Dodaj!" /></td>
            </tr>
            </tbody>
        </table>
    </form:form>

伊米ę
纳兹维斯科
达图罗季尼亚
数字索引
电子邮件

我尝试在@InitBinder旁边添加(“userDto”),但不幸的是,它没有起到任何作用。还没有找到更多适用的解决方案。如果还有什么我应该张贴在这里让我知道。我还可以提供一个指向存储库的链接,如果任何人都渴望尝试运行它。

我认为您需要将
UserValidator
中的
supports
方法更改为
UserDTO
类:

public boolean supports(Class<?> clazz) {
     return UserDTO.class.equals(clazz);
}
公共布尔支持(类clazz){
返回UserDTO.class.equals(clazz);
}

谢谢,将validate方法中的用户更改为userdt会有所帮助。Hovewer现在我在尝试提交无效表单-org.springframework.context.NoSuchMessageException后出现另一个错误:在区域设置“pl\u pl”的代码“NotEmpty.userForm.name.userDTO.name”下找不到消息。如何消除该错误或添加本地化消息?它正在使用key
NotEmpty.userForm.name.userDTO.name
查找显示该错误的文本。你在messages.properties文件中有吗?参考类似的答案,比如:我在validation.properties文件中有这样的答案。尝试重命名为messages.properties只是为了确定,但意识到我没有在任何地方配置消息,因此我目前正在处理该问题。我所做的只是通过一个巨大的解决方案启用注释,而不是仅仅添加
。我现在得到的是“可能不是空的”,因为我有
@NotEmpty
注释,结果应该不同,因为在messages.properties中,我有
NotEmpty.userForm.name.userDTO.name=name是必需的编辑-我忘了取消注释
binder.setValidator(userValidator),一切正常,非常感谢您的帮助。
public boolean supports(Class<?> clazz) {
     return UserDTO.class.equals(clazz);
}