@Valid注解&BindingResult实现优雅参数校验

前端提交数据到后端,后端需要对数据进行验证。例如登录功能,前端提交用户名密码到后端,如果后端不做校验,可能导致空指针等异常。如果所有的校验都靠手动处理又太麻烦。有没有一种简洁的办法解决这个问题?
最近在一个开源项目看到比较优雅的写法,通过@Valid注解加BindingResult实现。

代码如下:

LoginController.java

//LoginController.java

@RestController
@RequestMapping
public class LoginController {
   @Autowired
    private UserService userService;
    @Autowired
    private TokenUtils tokenUtils;

   @ApiOperation(value = "Login into the server and return token")
   @PostMapping
    public ResponseEntity login(@Valid @RequestBody UserLogin userLogin, @ApiIgnore BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            ResultMap resultMap = new ResultMap().fail().message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
        }
        UserLoginResult userLoginResult = new UserLoginResult(user);
        User user = userService.userLogin(userLogin);       
        return ResponseEntity.ok(new ResultMap().success().payload(userLoginResult));
    }

UserLogin.java

//UserLogin.java
@Data
public class UserLogin {

   private static final String REG_USER_PASSWORD=".{6,20}";

    @NotBlank(message = "Username cannot be empty")
    private String username;

    @NotBlank(message = "Password cannot be empty")
    @Pattern(regexp = REG_USER_PASSWORD, message = "密码长度为6-20位")
    private String password;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容