zoukankan      html  css  js  c++  java
  • 客户端传入数据的校验-RestController进阶

     使用Hibernate Validator进行数据校验

    Bean Validation注解(需要加入相关依赖,在SpringBoot中可以直接使用,SpringBoot会帮我们直接加入)

    @Null 验证对象是否为空(属性必须为空,客户不能传入此属性,否则会报错)

    @NotNull 验证对象是否为非空(属性不为空,客户必须传入此属性,否则会报错)

    @Min 验证Number和String对象是否大于等于指定的值

    @Max 验证Number和String对象是否小于等于指定的值

    @Size 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内

    @Past 验证Date和Calendar对象是否在当前时间之前

    @Future 验证Date和Calendar对象是否在当前时间之后

    @AssertTrue 验证Boolean对象是否为true

    @AssertFalse 验证Boolean对象是否为false

    @Valid 级联验证注解

    注解可以用在成员变量上:

    package com.example.demo;
    
    import java.util.Date;
    import java.util.List;
    
    import javax.validation.Valid;
    import javax.validation.constraints.DecimalMin;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Null;
    import javax.validation.constraints.Past;
    import javax.validation.constraints.Size;
    
    import com.fasterxml.jackson.annotation.JsonFormat;
    
    
    public class TvSeriesDto {
        @Null private int id;
        @NotNull private String name;
        @DecimalMin("1") private int seasonCount;
        //@Valid表示要级联校验;@Size(min=2)表示这个列表至少要有2项内容,否则通不过校验
        @Valid @NotNull @Size(min=2) private List<TvCharacterDto> tvCharacters; 
        
        //如果想用long型的timestamp表示日期,可用:@JsonFormat(shape = JsonFormat.Shape.NUMBER)
        @JsonFormat(timezone="GMT+8",pattern="yyyy-MM-dd")
        //@Past表示只接受过去的时间,比当前时间还晚的被认为不合格
        @Past private Date originRelease;
        
        public TvSeriesDto() {
            
        }
        
        public TvSeriesDto(int id, String name, int seasonCount, Date originRelease) {
            this.id = id;
            this.name = name;
            this.seasonCount = seasonCount;
            this.originRelease = originRelease;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getSeasonCount() {
            return seasonCount;
        }
        public void setSeasonCount(int seasonCount) {
            this.seasonCount = seasonCount;
        }
        public Date getOriginRelease() {
            return originRelease;
        }
        public void setOriginRelease(Date originRelease) {
            this.originRelease = originRelease;
        }
    
        @Override
        public String toString() {
            return "TvSeriesDto [id=" + id + ", name=" + name + ", seasonCount=" + seasonCount + ", originRelease="
                    + originRelease + "]";
        }
        
    }

     

    可以用在方法上:

    我们发现,如果传入参数不符合验证要求就会被退回去;通过BindingResult,无论传入参数是否符合要求,

    都可以通过BindingResult传入程序中,交由程序进行作判断。如下:

     

    客户端同意使用postman来发送请求~~

     

  • 相关阅读:
    ubuntu防火墙设置通过某端口
    pandas入门
    pyplot入门
    numpy教程
    跨域请求 spring boot
    spring boot 启动流程
    代理配置访问
    AOP,拦截器
    spring boot 启动不连接数据库
    Python 3.x 连接数据库(pymysql 方式)
  • 原文地址:https://www.cnblogs.com/yifeiyaoshangtian/p/9738889.html
Copyright © 2011-2022 走看看