zoukankan      html  css  js  c++  java
  • SpringBoot参数校验

    请求参数的校验是非常容易犯错,或存在较多改进点的常见场景。比较常见的问题主要表现在以下几个方面:

    • 仅依靠前端框架解决参数校验,缺失服务端的校验。这种情况常见于需要同时开发前后端的时候,虽然程序的正常使用不会有问题,但是开发者忽略了非正常操作。比如绕过前端程序,直接模拟客户端请求,这时候就会突然在前端预设的各种限制,直击各种数据访问接口,使得我们的系统存在安全隐患。
    • 大量地使用if/else语句嵌套实现,校验逻辑晦涩难通,不利于长期维护。

    所以,针对上面的问题,建议服务端开发在实现接口的时候,对于请求参数必须要有服务端校验以保障数据安全与稳定的系统运行。同时,对于参数的校验实现需要足够优雅,要满足逻辑易读、易维护的基本特点。

    JSR-303

    什么是JSR?

    JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。

    JSR-303定义的是什么标准?

    JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。

    Bean Validation中内置的constraint

    字符串上还可以加@NotBlank注解来判断是不是空串。

    Hibernate Validator附加的constraint

    动手实践

    实体类

    直接在实体类上加上上方的注解。()

    @Data
    @ApiModel(description="用户实体")
    public class User {
    
        @ApiModelProperty("用户编号")
        private Long id;
    
        @NotBlank
        @Size(min = 2,max = 5)
        @ApiModelProperty("用户姓名")
        private String name;
    
        @NotNull
        @Max(100)
        @Min(0)
        @ApiModelProperty("用户年龄")
        private Integer age;
    
        @NotNull
        @Email
        @ApiModelProperty("用户邮箱")
        private String email;
    }
    

    请求接口中

    直接在请求的参数实体类前加入@Valid注解

        @PostMapping("/")
        @ApiOperation(value = "创建用户", notes = "根据User对象创建用户")
        public String postUser(@Valid @RequestBody User user) {
            users.put(user.getId(), user);
            return "success";
        }
    
  • 相关阅读:
    【转】算命称骨
    为WinForms程序添加Form级快捷键的最简单方式
    Flex4中Datagrid垂直滚动使combobox&dropdownlist数据消失(已解决)
    Flex & form小技巧
    [转]Android开发之旅:环境搭建及HelloWorld
    [SQL2005]安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
    [转]Flex 中的皮肤
    天哪,Flex有没有阻塞方式啊?
    [资料库]Flash特效站点(带源码)
    开始学习JAVA
  • 原文地址:https://www.cnblogs.com/kpsmile/p/14173088.html
Copyright © 2011-2022 走看看