当前位置: 首页 > news >正文

网站建设培训个人网站制作公司都找乐云seo

网站建设培训个人,网站制作公司都找乐云seo,网站登录破解,深圳市建设交易网【2023】Spring Validation中NotNull注解、NotBlank注解介绍以及使用 前言一、简介spring-validation框架的常用注解 二、代码实现添加依赖1、实体举例2、Controller层:3、统一异常处理4、结果返回验证通过返回验证失败返回 前言 平常我们在编写代码的时候总需要很多if判空&am…

【2023】Spring Validation中@NotNull注解、@NotBlank注解介绍以及使用

  • 前言
  • 一、简介
    • `spring-validation`框架的常用注解
  • 二、代码实现
    • 添加依赖
    • 1、实体举例
    • 2、Controller层:
    • 3、统一异常处理
    • 4、结果返回
        • 验证通过返回
        • 验证失败返回

前言

平常我们在编写代码的时候总需要很多if判空,防止出现很多空指针问题。如:

if(name!=null){return "账号不能为空,请重新输入";
}
else if(password!=null){return "密码不能为空,请重新输入";
}

这样就会显得特别low,而且极不美观,而使用@NotNull 注解就可以通过注解直接实现验证。

一、简介

而spring给我们提供的 @NotNull ,@NotEmpty 等注解以实现对于接口参数的自动验证。

它这个实现主要是基于JSR 303 (JSR(Java Specification Request)是指由Java社区中的一个或多个成员提交的一项Java技术规范请求)的规范
JSR 303 的主要目标是为开发者提供一种在应用程序中进行数据验证的通用机制,而无需编写大量的验证代码。它定义了一组用于验证 Java 对象的注解和 API,可以用于验证对象的属性、方法参数和返回值等。

  • 注解:JSR 303 定义了一组用于验证的注解,如 @NotNull@Size@Pattern@Min、@Max 等。通过在 Java 对象的属性上添加这些注解,可以指定验证的条件和约束。
  • 常见的使用 JSR 303 的框架包括 Hibernate ValidatorSpring Validation 等。

早期的 Spring Web 基于 Hibernate Validator 实现了这些校验规范。在后期,Spring 将这部分校验独立成为了一个模块spring-validation,需要额外引入依赖实现相关注解校验。

spring-validation框架的常用注解

注解说明
@Null被注释的元素必须为null
@NotNull被注释的元素不能为null
@AssertTrue被注释的元素必须为true
@AssertFalse被注释的元素必须为false
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min)被注释的元素的大小必须在指定的范围内
@Digits(integer,fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future被注释的元素必须是一个将来的日期
@Pattern(value)被注释的元素必须符合指定的正则表达式

注意:

  • 下面的注解都可以使用message 属性做异常错误返回的。 如: @NotNull(message = "name不能为空")

  • 在进行请求参数的验证时,需要在controller方法的需要验证的参数前面加上@Valid或者@Validated注解,否则Form中的验证注解不起作用。

  • 如果是内层对象需要验证的话,需要在里面对象前也加上@valid,这样,无论嵌套多少,都可以验证(包括对象泛型)。

@Valid与@Validated的区别

  • @Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
  • @Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上,并且@Validated提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制

二、代码实现

添加依赖

springboot 2.3.0 以前可以直接使用,而在2.3.0之后的版本不会自动引入jar包,所以要添加以下maven

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

1、实体举例

import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.util.Date;@Data
public class User {@NotBlank(message = "姓名不能为空")private String name;@Max(value = 30,message = "姓名不能超过30岁")private Integer age;private Integer password;private String sex;@Past(message = "只能是过去的时间!")@DateTimeFormat(pattern = "yyyy-MM-dd")private Date date;@Email(message = "邮箱格式错误")private String email;/**如果引用了其他的对象要想其他的对象的生效,需要在引用时加上注解*/@Validprivate School school;
}

2、Controller层:

import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;/*** @author zhengfuping* @version 1.0* @description: TODO 测试 validation*/
@RestController
@RequestMapping("/test")
public class TestController {/*** @Param * @param u 实例对象* @param result validation提供的异常处理类* @return * @return Object*/@PostMapping("/save_user")@ResponseBodypublic Object saveUser(@Valid @RequestBody User u , BindingResult result) {
//        判断是否有异常,进行返回if (result.hasErrors()){FieldError fieldError = result.getFieldError();System.out.println(fieldError);return fieldError;}
//          没有异常打印日志返回System.out.println(u);return u;}
}

3、统一异常处理

如果不想每个Controller层的方法里面都要写一个判断方法,可以定义一个全局异常类进行统一处理

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Objects;/*** @author zhengfuping* @version 1.0* @description: TODO统一处理实体字段验证错误返回*/
@ControllerAdvice
@Slf4j
public class ControllerException {@ResponseBody@ExceptionHandler(MethodArgumentNotValidException.class)public Object handleValidException(MethodArgumentNotValidException e){log.error(Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
//            正常开发会有统一返回对象
//         return Result.error(500, Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());return e.getBindingResult().getFieldError().getDefaultMessage();}
}

添加统一异常处理后Controller代码则可以简化为(为了区分重新写了一个)

    @PostMapping("/save_user2")@ResponseBodypublic Object saveUser2(@Valid @RequestBody User u) {System.out.println(u);return "验证通过";}

4、结果返回

验证通过返回

在这里插入图片描述

验证失败返回

在这里插入图片描述

http://www.yayakq.cn/news/671896/

相关文章:

  • 网站上做树状框架图用什么软件wordpress 订单
  • 网站建设分金手指排名二五免费的网站开发平台
  • php做网站python做什么网站建设 网站
  • 包头企业网站建设公司建设蒙古语网站
  • 网站商城功能100万一300万企业所得税
  • 网站优化要怎么做如何做行业网站
  • 淘宝网站开发源码网站开发环境搭建章节教材书
  • 莱芜金点子网站深圳企业贷款
  • 广州seo网站排名建设刷单网站
  • 在线医疗网站建设半透明主题 wordpress
  • 米拓企业网站管理系统wordpress取消page
  • 宁波网站建设设计方案建网站需要什么条件
  • 网站前台展示网站公司哪家最专业
  • 广州网站建设网络科技有限公司手机端怎么打开响应式的网站
  • 网站外链数怎么查百度一下你就知道搜索
  • 沈阳网站怎么推广seo线上培训班
  • 广州市公需课在哪个网站可以做苏州市建设局招标网站
  • 在建设网站入账网站推广怎么做流量大
  • 免费网站建设价格费用抖推猫小程序怎么赚钱
  • 网站建设需要的人员搜索引擎优化课程总结
  • 建网站支持设备是什么意思首页wordpress主题
  • 雄安免费网站建设电话凡科免费建微信小程序网站
  • 网站开发学什么语言好电脑编程与网站建设
  • 网站seo外链怎么做新浪网网站的建设费用预算
  • 沈阳.....网站设计百度域名查询
  • 南通网站关键字优化php网站开发学校
  • 高青外贸公司网站建设企业信息系统类型
  • wordpress主题 外贸网站模板下载vps怎么做多个网站
  • 网站建设十胜石html网站的直播怎么做的
  • 自助外贸网站制作网站客户体验