简单快速对@RequestParam声明的参数作校验操作

目录
  • @RequestParam参数校验
    • 如下所示:
  • 接口入参验证(@RequestParam\@Valid\@Validated\@RequestBody)
    • 今天了解了下接口入参验证问题:

@RequestParam参数校验

如下所示:

  • 第一步、在springMVC注入org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
  • 第二步、重写校验异常
  • 第三步、在方法所在的类添加@Validated注解
  • 第四步、在需要校验的参数前面添加校验规则

比如

接口入参验证(@RequestParam\@Valid\@Validated\@RequestBody)

今天了解了下接口入参验证问题:

1、

  • @RequestParam:适用于Get请求且content-type为application/x-www-form-urlencoded
  • @RequestBody:适用于post请求且content-type为非application/x-www-form-urlencoded类型,一般为application/json

2、

(1)入参为@RequestParam或@RequestBody时,不用加@valid和@validated;

(2)入参为@NotNull时要在方法上加@valid或@validated,或者在类上加@Validated(@valid不能作用于类上),这样@NotNull才能起作用。

@Valid
@GetMapping("/exam-info")
public Boolean getInfo(@NotNull(message="examId不能为空")Long examId){......}

(3)当入参为实体对象时,需要在方法上加@Valid或@Validated或者在参数前加@Valid或@Validated,或者在类上加

@Validated
@Valid
@GetMapping("/exam-info")
public Boolean getInfo(User user){......} 

@GetMapping("/exam-info")
public Boolean getInfo(@Valid User user){......}

@Validated
@GetMapping("/exam-info")
public Boolean getInfo(User user){......} 

@GetMapping("/exam-info")
public Boolean getInfo(@Validated User user){......}

public Class User{
    @NotNull("id不能为空")
    private Integer id;
    .
    .
    .
}

(4)嵌套验证

@valid作用于属性上有嵌套验证作用,@validated不能作用于属性上,如下代码在User类的属性car上添加@valid注解,当传参id为空时会报错。

@GetMapping("/exam-info")
public Boolean getInfo(@Valid User user){.....}

@GetMapping("/exam-info")
public Boolean getInfo(@Validated User user){.....}

public class User{
  @Valid
  @NotNull("car不能为空")
  private Car car;
  ........
}

public class Car{
  @NotNull("id不能为空")
  private Integer id;
  ........
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈@RequestParam 参数是否必须传的问题

    一.源码展示 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestParam { @AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; boolea

  • SpringBoot如何优雅的处理校验参数的方法

    前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量的IF ELSE就比如下面这样: 这个例子只是校验了一下空参数.如果需要验证邮箱格式和手机号格式校验的话代码会更多,所以介绍一下validator通过注解的方式进行校验参数. 什么是Validator Bean Validation是Java定义的一套基于注解的数据校验规范,目前已经从JSR 303的1.

  • SpringBoot中自定义注解实现参数非空校验的示例

    前言 由于刚写项目不久,在写 web 后台接口时,经常会对前端传入的参数进行一些规则校验,如果入参较少还好,一旦需要校验的参数比较多,那么使用 if 校验会带来大量的重复性工作,并且代码看起来会非常冗余,所以我首先想到能否通过一些手段改进这点,让 Controller 层减少参数校验的冗余代码,提升代码的可阅读性. 经过阅读他人的代码,发现使用 annotation 注解是一个比较方便的手段,SpringBoot 自带的 @RequestParam 注解只会校验请求中该参数是否存在,但是该参数是

  • 详解在Spring MVC中使用注解的方式校验RequestParams

    概述 Spring MVC支持Bean Validation,通过这个验证技术,可以通过注解方式,很方便的对输入参数进行验证,之前使用的校验方式,都是基于Bean对象的,但是在@RequestParam中,没有Bean对象,这样使得校验无法进行,可以通过使用@Validated注解,使得校验可以进行. 校验bean对象 一般校验bean对象,为了可以自动的校验属性,可以通过两步解决: 一.声明对象 package com.github.yongzhizhan.draftbox.model; im

  • SpringBoot使用validation-api实现参数校验的示例

    我们在开发Java项目的时候,经常需要对参数进行一些必填项.格式.长度等进行校验,如果手写代码对参数校验,每个接口会需要很多低级的代码,这样会降低代码的可读性.那么我们能不能使用一种比较优雅的方式来实现,对请求中的参数进行校验呢? knife4j的安装与使用可参考我的博客:SpringBoot使用knife4j进行在线接口调试 正文 ValidationApi框架就是用来解决参数校验中代码冗余问题,ValidationApi框架提供一些注解用来帮助我们对请求参数进行校验: SpringBoot使

  • 简单快速对@RequestParam声明的参数作校验操作

    目录 @RequestParam参数校验 如下所示: 接口入参验证(@RequestParam\@Valid\@Validated\@RequestBody) 今天了解了下接口入参验证问题: @RequestParam参数校验 如下所示: 第一步.在springMVC注入org.springframework.validation.beanvalidation.MethodValidationPostProcessor; 第二步.重写校验异常 第三步.在方法所在的类添加@Validated注解

  • springboot 参数格式校验操作

    springboot 参数格式校验 @Validated 字面意思校验 @RequestBody 该注解不用多说,意思是接收为json格式的参数 @Validated 字面意思校验, 需要配合@NotBlank 或者 @NotNull 注解才能生效 进入到请求体参数中. springboot 参数注解校验 1.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s

  • 简单捋捋@RequestParam 和 @RequestBody的使用

    前端向后端传递参数,后端怎么去接收,就会想到 spring 的注解 之前的话,我一直用的是 RequestParam("userName") String userName 这种形式,讲道理不怎么用 RequestParam String userName 无意间该去看看这两个是有什么不同了. @RequestParam @RequestBody (以 json 数据的形式接收) 如果不写 @RequestParam(xxx) 注解的话,那么就前端可以有 可以没有对应的xxx名字都行

  • VS2019简单快速的打包可安装项目(图文教程)

    一.准备工作 (一)教程以"Hello World"为例: (二)安装VS自带打包插件 下面是一系列的安装需要走的步骤,就不详细介绍了. 二.开始打包 (一)右键解决方案->添加->新建项目 (二)新建一个Setup Project (三)进入了这个界面 如果不小心关闭了,右击新建的打包工程,浏览文件系统就可以看见上面的图了. (四)添加打包文件 首先获取项目路径. 右键Application Foluder->Add->文件. 输入刚才的地址,选取全部. (五

  • 使用Idea简单快速搭建springcloud项目的图文教程

    前言: 开发工具:IntelliJ IDEA 2020版 (Ultimate Edition) 框架:spring boot .spring cloud 搭建一套spring cloud微服务系统,实现服务之间的调用. 需要搭建一个父工程springcloud-test,一个服务注册中心eureka-server,两个微服务cloud-client,cloud-provider. 两个微服务均注册到服务注册中心. 一.搭建父项目 2. 3. (1)删掉src目录 (2)定义pom.xml文件 <

  • 使用@RequestParam 绑定List参数

    @RequestParam 绑定List参数 今天遇到了一个问题 比较尴尬.我写了一个接口,参数用@RequestParam接收,是一个List<String>.用postman可以正常的调用. 但是其他组的开发用feignClient就无法调通,报400. 苦思冥想不清楚问题原因. 后来想到应该是请求头的原因 假如Content-Type 是 application/json,前台传来的是json的话,用@RequestParam就接收不到.需要使用@RequestBody转化为对象. 顺便

  • Spring MVC如何使用@RequestParam注解获取参数

    目录 使用@RequestParam注解获取参数 @RequestParam无法获取参数 使用@RequestParam注解获取参数 创建Hello控制器类 package com.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bin

  • MongoDB快速入门笔记(七)MongoDB的用户管理操作

    MongoDB 简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 1.修改启动MongoDB时要求用户验证 加参数 --auth 即可. 现在我们把MongoDB服务删除,再重新添加服务 复制代码 代码如下: mongod --dbpath "D:\work\MongoDB\data" --

  • vue简单封装axios插件和接口的统一管理操作示例

    本文实例讲述了vue简单封装axios插件和接口的统一管理操作.分享给大家供大家参考,具体如下: 现在很多公司的项目都是前后端分离的项目,那么说到前后端分离,必定会有ajax请求来获得后台的数据. 在做jquery项目的时候,我们都会使用它封装好的方法来直接发起ajax请求. 在vue项目中,我们使用最多的就是axios这个插件,下面就简单的封装下这个插件并且把接口给统一化管理. 一.安装和配置 1.在项目根目录下打开终端安装 npm install axios -S 2.安装完成以后,在src

  • Nuxt的动态路由和参数校验操作

    其实动态路由就是带参数的路由.比如我们现在新闻模块下面有很多新闻详情页,这时候就需要动态路由的帮助了. 新闻详细页面 我们在news文件夹下面新建了_id.vue的文件,以下划线为前缀的Vue文件就是动态路由,然后在文件里边有$route.params.id来接收参数. /pages/news/_id.vue <template> <div> <h2>News-Content{{$route.params.id}}</h2> <ul> <l

随机推荐