springboot引入校验注解

这篇具有很好参考价值的文章主要介绍了springboot引入校验注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引入依赖

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
  </dependency>
      <dependency>
            <groupId>jakarta.validation</groupId>
            <artifactId>jakarta.validation-api</artifactId>
            <version>2.0.1</version>
        </dependency>

常用校验注解

@Null(groups={Add.class}) 参数必须为null,group设置分组,默认为default
@NotNull 参数不为null
@NotEmpty 参数不为null 且不为空集合,集合不为空
@NotBlank 参数不为null且不为空串,只能作用字符串类型
@AssertFalse 被注释的元素必须是false
@AssertTrue 被注释的元素必须是true
@Min(value) 被注释的元素必须为一个数字 >=
@Max(value) 被注释的元素必须为一个数字 <=
@DecimalMin(“value”) >=
@DecimalMax(“value”) <=
@NegativeOrZero <=0
@Range(min,max) 被注释的元素大小必须在指定的范围内
@Size(min ,max) 被注释的元素大小必须在指定的范围内
@Email 被注释的元素必须是电子邮箱地址
@Past 被注释的元素必须是一个过去的日期
@PastOrPresent 被注释的元素必须是一个过去的时间
@Future 被注释的元素必须是一个将来的日期
@Pattern(regexp = “1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$”) 被注释的元素必须是符合指定的正则表达式
@URL 被注释的元素必须是链接地址

提示:除了@NotNull注解之外,其他参数校验注解只有参数不为空的时候才生效

一般校验注解都有一个message的属性,这个属性代表的是注解校验不通过时返回的错误提示。

在controller层方法参数使用校验注解

  1. 首先需要在controller类上面加上@Validated注解。
  2. 在参数前面加上校验注解。如@NotBlank(message = “名字不能为空”) String name

上述注解的包:
org.springframework.validation.annotation.Validated;
javax.validation.constraints.NotBlank;
注解参数:message,当不满足校验条件的时候会抛出ConstraintViolationException异常,异常中会包含该message对应的内容----名字不能为空。

import org.springframework.validation.annotation.Validated;
import java.util.*;

@RestController
@Validated
public class TestController extends JeecgController<Test, TestService> {
    @PostMapping(value = "/test")
    Result<?> test(@RequestBody @NotBlank(message = "名字不能为空") String name,
                   @NotNull(message = "年龄不能为空") @Max(value = 30,message = "最大不能超过30") @Min(value = 18,message = "最小不能小于18") Integer age) {
        return null;
    }
}
效果(已处理)

springboot引入校验注解,springboot,spring boot,java,spring

在controller层的DTO对象使用校验注解

  1. 首先需要在controller类上面加上@Validated注解。
  2. 在对象参数前面加上@Valid注解,并在对象内使用校验注解
  3. 如果对象参数内部还嵌套这其他对象,需要在对象属性上面加上@Valid注解(这条和第二条原理差不多)

不满足对象内的校验时,会抛出MethodArgumentNotValidException异常
上述注解的包:
org.springframework.validation.annotation.Validated;
javax.validation.Valid;

import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import java.util.*;

@RestController
@Validated
public class TestController extends JeecgController<Test, TestService> {
    @PostMapping(value = "/test")
    Result<?> test(@RequestBody @Valid TestDTO testDTO) {
        return testService.test(testDTO);
    }
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
@ApiModel(value = "testDTO")
public class TestDTO {
	@ApiModelProperty(value = "用户id",required = true)
	@NotBlank(message = "用户id不能为空")
	private String userId;

	@ApiModelProperty(value = "订单id列表",required = true)
	@Size(min = 1, message = "至少要选择一个订单")
	private List<String> orderIdList;

	@ApiModelProperty(value = "是否通知顾客",required = true)
	@NotNull(message = "是否通知顾客不能为空")
	private Boolean notifyCustomer;
}
效果(已处理)

springboot引入校验注解,springboot,spring boot,java,spring

校验失败返回

springboot引入校验注解,springboot,spring boot,java,spring

一般来说,项目都会定好响应体的结构,直接抛异常返回的信息和预期不太符合。
这个时候就需要我们来全局精准捕获该异常并处理异常信息,按照符合标准的方式返回。

当请求是GET请求,并且使用DTO对象接收参数时,使用方式和POST请求使用DTO对象用法一样,但是校验不通过的异常不一样。GET请求抛出的异常是BindException。

@RestControllerAdvice
@Slf4j
public class ExceptionHandler {

    /**
     * 这个异常在校验不通过的时候就会抛出
     *
     * @param e
     * @return: Result<?>
     **/
        @ExceptionHandler({MethodArgumentNotValidException.class, ConstraintViolationException.class, BindException.class})
    public Result<?> handleMethodArgumentNotValidException(Exception e) {
        log.info("全局捕获校验注解异常e={}", e.getMessage());
        Result<?> res = Result.ok();
        if (e instanceof MethodArgumentNotValidException) {
            MethodArgumentNotValidException notValidException = (MethodArgumentNotValidException) e;
            BindingResult bindingResult = notValidException.getBindingResult();
            List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
            String msg = fieldErrorList.stream().map(FieldError::getDefaultMessage).collect(Collectors.joining(","));
            return res.error511(msg);
        } else if (e instanceof ConstraintViolationException) {
            ConstraintViolationException violationException = (ConstraintViolationException) e;
            Set<ConstraintViolation<?>> constraintViolations = violationException.getConstraintViolations();
            String msg = constraintViolations.stream().map(o -> String.valueOf(o.getMessage())).collect(Collectors.joining(","));
            return res.error511(msg);
        } else if (e instanceof BindException) {
            BindException bindException = (BindException) e;
            BindingResult bindingResult = bindException.getBindingResult();
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            List<Object> collect = fieldErrors.stream().map(error -> error.getDefaultMessage()).collect(Collectors.toList());
            return res.error511(StringUtils.join(collect, ","));
        } else {
            return res.error511(e.getMessage());
        }
    }

    }

处理后:
springboot引入校验注解,springboot,spring boot,java,spring
参考:https://blog.csdn.net/qq_42956993/article/details/129199922文章来源地址https://www.toymoban.com/news/detail-653433.html

到了这里,关于springboot引入校验注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java spring boot 注解、接口和问题解决方法(持续更新)

    @RestController         是SpringMVC框架中的一个注解,它结合了@Controller和@ResponseBody两个注解的功能,用于标记一个类或者方法,表示该类或方法用于处理HTTP请求,并将响应的结果直接返回给客户端,而不需要进行视图渲染 @Controller         是Spring Framework中的注解,用于

    2024年02月06日
    浏览(55)
  • Spring参数注解,支持数组入参(List)校验

    2、对返回的校验信息异常进行全局捕获,封装后返回。 参考 https://stackoverflow.com/questions/28150405/validation-of-a-list-of-objects-in-spring

    2024年02月11日
    浏览(57)
  • Springboot-- 注解字段校验,并统一设置返回值

    引包: import org.springframework.validation.annotation.Validated; 规则 @AssertFalse Boolean,boolean 验证注解的元素值是false @AssertTrue Boolean,boolean 验证注解的元素值是true @NotNull 任意类型 验证注解的元素值不是null @Null 任意类型 验证注解的元素值是null @Min(value=值) BigDecimal,BigInteger, byte,short,

    2024年02月11日
    浏览(52)
  • SpringBoot校验,DTO文件中常用的注解应用案例.

    目录 1、需要引入的Maven依赖 2、CompanyDTO 文件 3、对 DTO文件中使用的校验注解说明 参考文章:        在观看本篇文章之前,可以先参考我之前写的一篇文章 “ Spring5,Service层对DTO文件进行数据格式校验. ”  ,这篇文章是介绍在 Service层 对DTO文件的校验。 以下方的 Compa

    2024年02月12日
    浏览(29)
  • Springboot——@valid 做字段校验和自定义注解

    再项目开发中,针对前端传递的参数信息,有些接口中需要写大量的 if 判断,导致代码臃肿,不够优雅。 此时,可以使用 @Valid 实现基本的字段校验。 springboot 2.3之前 ,直接进行开发即可,无需引用额外的依赖 集成在 spring-boot-starter-web 中。 springboot 2.3之后 需要额外引入

    2023年04月26日
    浏览(57)
  • Java 4种校验注解(值校验、范围校验、长度校验、格式校验)

    1 值校验 1.1 @NotNull注解 被注解的元素必须不为空,一般 用于数值类型的参数校验 @NotNull(message = \\\"用户编号不能为空\\\") private Integer userId; 1.2 @NotBlank注解 验证注解的元素值不为空(不为null、去除首位空格后长度为0),并且类型为String。 @NotBlank(message = \\\"用户名称不能为空\\\") pr

    2024年02月16日
    浏览(42)
  • Spring boot Websocket 添加授权校验(校验Header)

            最近需要用到websocket,并且确认是在登录成功的情况下才能连接,看了下,websocket 5.8以上已经支持校验了,但是由于我项目是spring boot 2.7.9,为了兼容,只能考虑通过在websocket 的header中带上验证信息,进行校验,详细如下 1.首先往spring boot pom 内加入 websocket的依赖

    2024年02月07日
    浏览(31)
  • Spring Boot中参数校验

    为了保证数据的正确性、完整性,前后端都需要进行数据检验。作为一名后端开发工程师,不能仅仅依靠前端来校验数据,我们还需要对接口请求的参数进行后端的校验。最常见的做法就是通过if/else语句来对请求的每一个参数一一校验,当很多参数需要校验的时候,if/else语

    2023年04月16日
    浏览(38)
  • SpringBoot Redis 注解 拦截器来实现接口幂等性校验

    幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如:订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提

    2024年01月19日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包