springboot 嵌套校验

1. 常用的校验注解

//空检查
@NotNull          对象不为null
@NotBlank         字符串不为null且不是”“ 
@NotEmpty         集合不为null且不为空
 
//长度检查
# javax.validation.constraints.Size 包下的
@Size(min = 1, max = 10)     字符串长度 ;集合大小
@Length                      字符串长度 (这个对字符串不好使)  
 
//数值检查
@Min(1)
@Max(10)
@Range(min = 1, max = 10)
 
//其他
@Email
@AssertTrue
@AssertFalse 

1.

 @NotNull(message = "不能为空")
    @DecimalMin(value = "0.01",message = "红包金额必须大于或等于0.01")
    @DecimalMax(value = "10000" ,message = "红包金额必须小于或等于10000")
    private String totalMoney;

1. java 内置的判空功能(list. add(null) 是不报错的的,size 为1,但是 get(0).getName() 会报空指针)

源码:

   public static <T> T requireNonNull(T obj, String message) {
        if (obj == null)
            throw new NullPointerException(message);
        return obj;
    }

1. springboot 嵌套校验

校验框架:

  <!--校验框架-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.4.3.Final</version>
            <scope>test</scope>
        </dependency>

实体类里的校验注解 就是这个包下的

package com.example.demo.entity;

import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
import javax.validation.Valid;
import java.util.List;

/**
 * @program: springboot_01
 * @description:
 * @author: guoyiguang
 * @create: 2021-01-14 14:43
 **/
@Data
public class User {

    private Integer id;

    @NotBlank(message = "用户 name 非空")
    private String name;
    @Range(min = 0, max = 1, message = "性别选择错误")
    private Integer sex;


    /**
    * @Valid 可以用来 校验属性(和@validated 的主要区别),必须加这个,否则进不了 Order 里的 属性值校验
    */
    @Valid
    @NotEmpty(message = "orderList 非空")
    private List<Order> orderList;


}

package com.example.demo.entity;


import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import java.time.LocalDateTime;

/**
 * @program: springboot_01
 * @description:
 * @author: guoyiguang
 * @create: 2021-01-14 14:43
 **/
@Data
public class Order {

    private Integer id;

    @NotBlank(message= "orderGUID 非空")
    private String orderGUID;
    private String name;
    private String description;

    /**
    *  以下属性测试mybatis插件
    */
    private String createdGUID;
    private String updatedGUID;

    private LocalDateTime createdTime;
    private LocalDateTime updatedTime;

    private String delFlag;



}

Controller:

package com.example.demo.controller;

import com.example.demo.entity.Order;
import com.example.demo.entity.User;
import com.example.demo.service.CommodityOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.validation.Valid;
import java.util.List;

/**
 * @program: springboot_01
 * @description:
 * @author: guoyiguang
 * @create: 2021-01-16 13:16
 **/
@Controller
@RequestMapping("/aa")
public class TestController {

    @Autowired
    CommodityOrderService commodityOrderService ;

    @PostMapping("/a")
    @ResponseBody
    public String a(@Valid @RequestBody User user , BindingResult br){
        if (br.hasErrors()){
            List<ObjectError> allErrors = br.getAllErrors();
            ObjectError objectError = allErrors.get(0);
            System.out.println(objectError.getDefaultMessage());
            System.out.println(objectError.getObjectName());
            System.out.println(allErrors);
            return objectError.getDefaultMessage() ;
        }
        return  "成功";
    }

    @PostMapping("/b")
    @ResponseBody
    public String b(@Valid @RequestBody List<Order> orderList , BindingResult br){
        if (br.hasErrors()){
            List<ObjectError> allErrors = br.getAllErrors();
            ObjectError objectError = allErrors.get(0);
            System.out.println(objectError.getDefaultMessage());
            System.out.println(objectError.getObjectName());
            System.out.println(allErrors);
            return "失败" ;
        }
        return  "成功";
    }





}

PostMan 传参:

{
	"name" : "慕容皝" ,
//   orderList  这个属性名称和 所在实体类的 属性名称必须一致的,否则数据填充不进去
	 "orderList" : [
	{
		"orderGUID":"1367017420497834031" 
       
   
    },
	{
	"orderGUID":1367017420502028376
    }
	]
  
 
}

orderList 不传:

orderGUID 为空

orderGUID 不传:

接下来测试:

 @PostMapping("/b")
    @ResponseBody
    public String b(@Valid @RequestBody List<Order> orderList , BindingResult br){
        if (br.hasErrors()){
            List<ObjectError> allErrors = br.getAllErrors();
            ObjectError objectError = allErrors.get(0);
            System.out.println(objectError.getDefaultMessage());
            System.out.println(objectError.getObjectName());
            System.out.println(allErrors);
            return objectError.getDefaultMessage() ;
        }
        return  "成功";
    }

所以暂时不推荐 controller  的 b 方法

1. 实体类的 Integer 类型如果前段 传 "",会自动将 "" 转为 null

@RequestMapping("/nulltest1")
    @ResponseBody
    public String nulltest(String id){
        // postMan  传 "" ,后台会接受 ""
        System.out.println(id);
        return  id;
    }

    @PostMapping("/nulltest2")
    @ResponseBody
    public Integer nulltest2(@RequestBody Boy boy){
        // sex  在 Boy  是 Integer 类型
        // postMan 传 {"sex":""} 打印 null 
        // postMan 传 {"sex":1}  打印 1
        System.out.println(boy.getSex());
        return  boy.getSex();
    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值