关于JSR303校验不生效的问题?

在看spring in actin第四版, 第五章5.4.2校验数据这节, 使用JSR303进行数据校验, 但是没有生效, 也没有报错

使用的是hibernate-validator的实现, gradle依赖:

compile group: 'org.hibernate', name: 'hibernate-validator', version: '6.0.9.Final'

javabean代码:

public class Spitter {

    private Long id;

    @NotNull
    @Size(min = 5, max = 16)
    private String username;

    @NotNull
    @Size(min = 5, max = 25)
    private String password;

    @NotNull
    @Size(min = 2, max = 30)
    private String firstName;

    @NotNull
    @Size(min = 2, max = 30)
    private String lastName;

    @NotNull
    @Email
    private String email;
        
   // getter and setter
}

controller相关代码块:

 @RequestMapping(value = "/register", method = RequestMethod.POST)
    public String processRegistration(@Valid Spitter spitter, Errors errors) {
        System.out.println(spitter);
        if (errors.hasErrors()) {
            errors.getAllErrors().forEach(System.out::println);
            return "registerForm";
        }

        spitterRepository.save(spitter);

        return "redirect:/spitter/" + spitter.getUsername();
    }
阅读 5.2k
2 个回答

我试了一下,在我这你的代码没有问题,参数有问题时可以进入到 if 块,比如当只传递 username 和 password 会给出如下输出:

Field error in object 'spitter' on field 'lastName': rejected value [null]; codes [NotNull.spitter.lastName,NotNull.lastName,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spitter.lastName,lastName]; arguments []; default message [lastName]]; default message [不能为null]
Field error in object 'spitter' on field 'email': rejected value [null]; codes [NotNull.spitter.email,NotNull.email,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spitter.email,email]; arguments []; default message [email]]; default message [不能为null]
Field error in object 'spitter' on field 'firstName': rejected value [null]; codes [NotNull.spitter.firstName,NotNull.firstName,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spitter.firstName,firstName]; arguments []; default message [firstName]]; default message [不能为null]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题