springboot:统一参数校验(JSR303校验)

news2024/9/28 22:29:59

        业务需求:在controller中对必填参数和参数类型做合法性校验

1、在项目父工程添加spring-boot-starter-validation的依赖

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

2、在引入的validation依赖包下有很多这样的校验注解,直接使用注解定义校验规则即可。

3、现在对下面业务中的文章发布功能做参数校验

package com.heima.wemedia.controller.v1;

import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.wemedia.model.po.WmNewsMaterial;
import com.heima.wemedia.service.WmNewsService;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;

@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController {

    @Autowired
    WmNewsService wmNewsService;
    
    
    /*文章发布*/
    @PostMapping("/submit")
    public ResponseResult addNews(@RequestBody WmNewsDto dto){
        return wmNewsService.addNews(dto);
    }

}

4、可以看到上面接口使用WmNewsDto模型对象接收参数,所以进入WmNewsDto类,在属性上添加校验规则。

        下面我使用了NotEmpty注解验证非空

package com.heima.model.common.wemedia.model.dto;

import lombok.Data;

import javax.validation.constraints.NotEmpty;
import java.util.Date;
import java.util.List;

@Data
public class WmNewsDto {

    private Integer id;
     /**
     * 标题
     */
    @NotEmpty(message = "文章标题不能为空")
    private String title;
     /**
     * 频道id
     */
    private Integer channelId;
     /**
     * 标签
     */
    @NotEmpty(message = "标签不能为空")
    private String labels;
     /**
     * 发布时间
     */
    private Date publishTime;
     /**
     * 文章内容
     */
    @NotEmpty(message = "文章内容不能为空")
    private String content;
     /**
     * 文章封面类型  0 无图 1 单图 3 多图 -1 自动
     */
    private Short type;
     /**
     * 提交时间
     */
    private Date submitedTime; 
     /**
     * 状态 提交为1  草稿为0
     */
    private Short status;
     
     /**
     * 封面图片列表 多张图以逗号隔开
     */
    private List<String> images;
}

5、还需要再controller中添加@Validated 注解开启参数校验

    /*文章发布*/
    @PostMapping("/submit")
    public ResponseResult addNews(@RequestBody @Validated WmNewsDto dto){
        return wmNewsService.addNews(dto);
    }

6、如果校验出错Spring会抛出MethodArgumentNotValidException异常,我们需要在统一异常处理器中捕获异常,解析出异常信息。

        代码如下

@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e) {
    BindingResult bindingResult = e.getBindingResult();
    List<String> msgList = new ArrayList<>();
    //将错误信息放在msgList
    bindingResult.getFieldErrors().stream().forEach(item->msgList.add(item.getDefaultMessage()));
    //拼接错误信息
    String msg = StringUtils.join(msgList, ",");
    log.error("【系统异常】{}",msg);
    return new RestErrorResponse(msg);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/852849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xml布局不显示的编写代码方法

新建项目在新项目用dp编写布局复制粘贴去掉所有dp在复制dimen/dp_

element-plus的日期选择器限定选择范围

目录 前言一、最近30天总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; element-plus的日期选择器限定选择范围&#xff0c;由于数据的获取范围限定&#xff0c;需要前端处理一下日期的选择范围 提示&#xff1a;以下是本篇文章正文内容&#xff0c…

golang学习随记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 go学习快捷键及快速生成代码片段go基础循环流程控制关键字切片&#xff0c;拷贝函数闭包 defer语句格式化输出go语言随机数rand.seed() 包管理并发编程goroutinecha…

LangChain源码逐行解密之LLMs(一)

LangChain源码逐行解密之LLMs(一) 18.1 LangChain应用程序演示 本节会以一个简单的应用程序为切入点,进入到LangChain的源码部分,带领大家贯通整个LangChain最核心的框架源码,我们的应用程序不会太复杂,只是分析LangChain源码的切入点或者入口点。 如图18-1所示,是应用程…

【洋码头关键词获取商品列表技术解析】

洋码头关键词获取商品列表功能简介 洋码头的关键词获取商品列表功能是为了满足用户的个性化需求&#xff0c;提供更精准、更有针对性的商品推荐。用户可以输入关键词搜索&#xff0c;系统会根据关键词从海量的商品库中筛选出相关的商品列表&#xff0c;从而使用户更容易找到所需…

【目标检测系列】YOLOV1解读

前言 从R-CNN到Fast-RCNN&#xff0c;之前的目标检测工作都是分成两阶段&#xff0c;先提供位置信息在进行目标分类&#xff0c;精度很高但无法满足实时检测的要求。 而YoLo将目标检测看作回归问题&#xff0c;输入为一张图片&#xff0c;输出为S*S*(5*BC)的三维向量。该向量…

PyTorch 微调终极指南:第 2 部分 — 提高模型准确性

一、说明 如今&#xff0c;在训练深度学习模型时&#xff0c;通过在自己的数据上微调预训练模型来迁移学习已成为首选方法。通过微调这些模型&#xff0c;我们可以利用他们的专业知识并使其适应我们的特定任务&#xff0c;从而节省宝贵的时间和计算资源。本文分为四个部分&…

AI文档识别技术之表格识别 (一)

AI文档识别技术之表格识别(一) 文章目录 文章目录 AI文档识别技术之表格识别(一)1. 表格识别原理介绍1.1 表格类型分类1.2 识别原理 2. 整体识别流程2.1 流程图2.2 图像处理部分大致流程 3. 将表格转换为html与json格式输出3.1 html格式3.2 json格式3.3 表格识别实例 前言 此文…

可靠传输概述——停止-等待协议

基本概念&#xff1a; 使用差错检测技术&#xff08;例如循环冗余校验CRC&#xff09;&#xff0c;接收方的数据链路层就可检测出帧在传输过程中是否出现了误码。 此时有&#xff1a; 不可靠传输服务&#xff1a;仅仅丢弃有误码的帧&#xff0c;其他什么也不做 可靠传输服务&a…

Weblogic未授权远程代码执行漏洞 (CVE-2023-21839)

前言&#xff1a; Weblogic 允许远程用户在未经授权的情况下通过IIOP/T3进行JNDI lookup 操作&#xff0c;当JDK版本过低或本地存在javaSerializedData时&#xff0c;这可能会导致RCE漏洞。 0x00 环境设置 此次实验&#xff0c;我们使用P神的vulhub。启动环境&#xff1a; cd…

Android Studio实现图形验证码

源代码 源代码MainActivity 效果图32行需要修改,不修改会报错:需要常量表达式,我的代码已修改 点击后 MainActivity import static com.example.graphicverificationcode.RxCaptcha.TYPE.NUMBER;import android.annotation.SuppressLint; import android.os.Bundle; impo…

【Terraform学习】保护敏感变量(Terraform配置语言学习)

实验步骤 创建 EC2 IAM 角色 导航到IAM 在左侧菜单中&#xff0c;单击角色 。单击创建角色该按钮以创建新的 IAM 角色。 在创建角色部分&#xff0c;为角色选择可信实体类型&#xff1a; AWS 服务 使用案例:EC2 单击下一步 添加权限&#xff1a;现在&#xff0c;您可以看到…

Sentieon | 每周文献-Multi-omics(多组学)-第九期

多组学系列文章-1 标题&#xff08;英文&#xff09;&#xff1a; Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrated model标题&#xff08;中文&#xff09;&#xff1a; 基于多组学分析和综合模型…

Java使用String来开发验证码

Java使用String来开发验证码 需求分析代码实现小结Time 需求分析 使用String来开发验证码。 实现随机产生验证码&#xff0c;验证码的每位可能是数字、大写字母、小写字母 根据需求分析&#xff0c;步骤如下&#xff1a; 1.首先&#xff0c;设计一个方法&#xff0c;该方法接收…

细胞——求细胞数量 C++详解

细胞——求细胞数量 C详解 求细胞数量题目描述输入格式输出格式样例样例输入样例输出 提示数据规模与约定 解法代码 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还…

产品经理回到三线城市能去干什么?

首先要强调一个重要原则&#xff1a;尽量待在一线城市。我们付出了很多努力&#xff0c;在大城市生活了好几年&#xff0c;如果不能在这里获得成功&#xff0c;真的愿意回到原来的地方吗&#xff1f;我出生在山东农村&#xff0c;家庭条件很普通。自从上大学时&#xff0c;我就…

企业权限管理(二)-环境搭建

环境搭建 项目的基本架构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

Drools用户手册翻译——第四章 Drools规则引擎(十三)复杂事件处理(CEP)会话时钟,事件流和切入点

甩锅声明&#xff1a;本人英语一般&#xff0c;翻译只是为了做个笔记&#xff0c;所以有翻译错误的地方&#xff0c;错就错了&#xff0c;如果你想给我纠正&#xff0c;就给我留言&#xff0c;我会改过来&#xff0c;如果懒得理我&#xff0c;就直接划过即可。 目录 会话时钟…

无货源无技术无专业做跨境电商?Live Market一站式服务助你出海

近年来&#xff0c;我国跨境电商发展取得可喜进展。商务部数据显示&#xff0c;跨境电商货物进出口规模占外贸比重由5年前的不足1%上升到目前的5%左右。越来越多的资本开始重视这一领域&#xff0c;越来越多的玩家开始布局。 然而&#xff0c;对于普通商家来说想要踏足跨境电商…

解决VtsHalLightTargetTest问题

一、问题描述&#xff1a; 二、解决方案&#xff1a; Date: Fri, 14 Jul 2023 11:14:31 0800 Subject: [PATCH] fix: 解决VtsHalLightTargetTest问题Description:依据报错修改代码Self Test:PassChange-Id: Ia0bca62480cd26845b285ae61c3d8264d8555d9a ---diff --git a/aidl/d…