当前位置: 首页 > 知识库问答 >
问题:

Springboot验证异常:org.springFramework.Validation.BeanPropertyBindingResult异常

仉明知
2023-03-14

下面是我的代码:

@RequestMapping(value = "/register", method = RequestMethod.POST)
    public String saveForm(@Valid Users users,Model model,Errors errors) {
        if(errors.hasErrors()) {
            return "registerPage";
        }
        else {
            model.addAttribute("message","Registered................");
        System.out.println("Save Users TEST------------------------------------>");
        userRepository.save(users);

        return "register-success";
        }


    }

这里有个例外:

对象“users”中字段“salary”上的字段错误:拒绝值[null];代码[NotNull.Users.Salary,NotNull.Salary,NotNull.java.lang.Integer,NotNull];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码[users.salary,salary];参数[];default message[salary]];默认消息[不能为空]字段“dept”上对象“users”中的字段错误:拒绝值[];代码[size.users.dept,size.dept,size.java.lang.String,size];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码[users.dept,dept];参数[];默认消息[dept],10,2];默认消息[长度应介于2到10之间]字段“name”上对象“users”中的字段错误:拒绝值[];代码[size.users.name,size.name,size.java.lang.String,size];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码[users.name,name];参数[];default message[name],30,2];默认消息[长度应介于2到30之间]]

public class Users implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id")
    private Integer id;
    @Column(name="name")
    @NotNull
    @Size(min=2,max=30,message="Length should be in between 2 to 30")
    private String name;

    @Column(name="salary")
    @NotNull
    private Integer salary;
    @Column(name="dept")
    @NotNull
    @Size(min=2,max=10,message="Length should be in between 2 to 10")
    private String dept;

    ....

    }

下面是我的html表单(使用thymeleaf):

<h1 th:text="${message}" align="center"></h1>
<div class="container">
    <h2>Registration form</h2>
      <form class="form-horizontal" th:object="${registerCommand}" th:action="@{/rest/users/register}" method="post">
        <div class="form-group">
            <label for="name">Username:</label>
             <input type="text"
                class="form-control" id="name" placeholder="Enter Name"
                name="name" th:field="*{name}"> <br />
            <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}" th:field="*{name}"
                class="alert alert-danger"></p>
        </div>
        <div class="form-group">
            <label for="dept">Department:</label>
             <input type="text"
                class="form-control" id="dept" placeholder="Enter Department"
                name="dept" th:field="*{dept}"> <br />
            <p th:if="${#fields.hasErrors('dept')}" th:errors="*{dept}" th:field="*{dept}"
                class="alert alert-danger"></p>
        </div>
        <div class="form-group">
            <label for="salary">Salary:</label> <input type="text"
                class="form-control" id="salary" placeholder="Enter salary"
                name="salary" th:field="*{salary}"> <br />
            <p th:if="${#fields.hasErrors('salary')}" th:errors="*{salary}" th:field="*{salary}"
                class="alert alert-danger"></p>
        </div>

        <button type="submit" class="btn btn-sucess">Submit</button>
    </form>
</div>

共有1个答案

厍晋鹏
2023-03-14

找到了我的原因,我没有在我的saveForm控制器中传递正确的参数-

@RequestMapping(value = "/register", method = RequestMethod.POST)
    public String saveForm(@ModelAttribute("registerCommand") @Valid Users users, BindingResult bindingResult, Model model){

        if(bindingResult.hasErrors()) {

            return "registerPage";
        }
        else {
        userRepository.save(users);
        return "register-success";
        }
    }

注意-如果您使用的是BindingResult,它应该正好在bean之后。

只有在顺序重要的情况下才是BindingResult。它必须跟随正在验证的bean,以便Spring知道将任何验证错误放在哪里。

 类似资料:
  • 我正在测试带注释的javax验证。它们在应用程序中工作良好,方法参数上有注释。但是当我试图通过手动构建验证工厂来测试它们时 我得到以下错误。 javax。验证。ValidationException:HV000183:无法初始化“javax”。艾尔。“表达工厂”。检查类路径上是否有EL依赖项,或者改用ParameterMessageInterpolator 收到这个错误后,我在gradle文件中添

  • 我正在测试一个具有预期异常的方法。我还需要验证在抛出异常后是否调用了一些清理代码(在模拟对象上),但看起来该验证被忽略了。这是代码。我正在使用 Junit 来验证预期的异常。 似乎完全被忽略了。无论我在中使用什么方法,我的测试都通过了,这不是我想要的。 你知道为什么会发生这种情况吗?

  • 在dynamodb表上运行batchGetItem函数时获取ValidationException。我在密钥列表下同时提供哈希密钥和范围密钥。以下是请求和响应。 请求: 答复:

  • 向addUser控制器提交表单时发生异常 获取窗体的控制器 为什么会出现此异常,输入无效电子邮件而不是验证必须执行。

  • 从Weblogic 11c切换到Weblogic 12c后,我得到了这个异常: 我发现了有关这些主题的其他问题,但所有解决方案都是关于错误的库(Vaadin 7-Bean验证)。我认为我的Hibernate验证器与bean验证器库匹配。这就是我在WEB-INF/lib中的内容: 它会是由其他一些依赖引起的吗? EDIT我目前在我的weblogic应用程序中有这个。xml,一切正常:

  • 我有一个使用JDK8开发的SpringBoot应用程序,现在已移植到JDK11。我在启动时遇到以下异常: 这是我的pom。xml: 我已经尝试了从2.1.8到2.2.1的SpringWebStarter,我总是得到相同的错误。 我无法再次使用JDK8,因为计算机已从Windows 7更新到Windows 10,并且我不愿意在Oracle注册以下载JDK8;) 有没有人遇到过这个问题,或者有人知道如