使用自定义注解进行restful请求参数的校验方式

目录
  • 自定义注解进行restful请求参数的校验
    • 1、首先我们使用@interface定义一个注解
    • 2、实现注解实现类(和@interface定义的注解在同一个包下)
    • 3、在需要校验的对象的字段上加上@ByteLength注解
  • springboot小技巧:restful接口参数校验,自定义校验规则
    • restful风格接口参数校验
    • 自定义参数校验注解方法

自定义注解进行restful请求参数的校验

在使用springmvc开发的时候,我们通常会在controller中的方法参数实体类中加上@NotNull()等类似注解,然后在方法参数上加上

@Vilad 注解,这样在有请求的时候,就会自动按照我们的注解进行参数是否合法,避免了我们手工的校验。

但是,自带的校验注解有的时候并不能满足我们的业务验证需求,因此,我们就有必要进行自定义校验注解,以业务为需求定制我们

自己的校验注解。

下面我们来看一个例子:

1、首先我们使用@interface定义一个注解

@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = ByteLengthValidator.class)// 使用@Constraint指定注解校验实现类,这是一个限制型注解,只能使用指定的实现类
@Documented
public @interface ByteLength {
    int min() default 0;
    int max() default 2147483647;
    String charsetName() default "GBK";
    String message() default "的长度只能在{min}和{max}之间";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

2、实现注解实现类(和@interface定义的注解在同一个包下)

注解实现类需要实现ConstraintValidator 接口

public class ByteLengthValidator implements ConstraintValidator<ByteLength, String>{   // 实现ConstraintValidator
 int min;
 int max;
        String charsetName;

 @Override
 public void initialize(ByteLength constraintAnnotation) {
  this.min = constraintAnnotation.min();
  this.max = constraintAnnotation.max();
        this.charsetName = constraintAnnotation.charsetName();
 }

 @Override
 public boolean isValid(String value, ConstraintValidatorContext context) {   // 实现校验规则
        if (null == value) {
            return min <= 0;
        }
        try {
            int length = value.getBytes(charsetName).length;
            return length >= min && length <= max;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return false;
        }
 }
}

3、在需要校验的对象的字段上加上@ByteLength注解

然后在接口方法的该对象参数上加上@Vilad 注解,在接收的请求的时候,就会使用

我们自定义的@ByteLength 进行校验该字段。

springboot小技巧:restful接口参数校验,自定义校验规则

restful风格接口参数校验

在接收参数的实体类的属性上添加默认的注解或者自定义注解

自定义参数校验注解方法

1>定义自定义注解

2>定义参数校验逻辑的处理类

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

(0)

相关推荐

  • Spring MVC参数校验详解(关于`@RequestBody`返回`400`)

    前言 工作中发现一个定律,如果总是习惯别人帮忙做事的结果是自己不会做事了.一直以来,spring帮我解决了程序运行中的各种问题,我只要关心我的业务逻辑,设计好我的业务代码,返回正确的结果即可.直到遇到了400. spring返回400的时候通常没有任何错误提示,当然也通常是参数不匹配.这在参数少的情况下还可以一眼看穿,但当参数很大是,排除参数也很麻烦,更何况,既然错误了,为什么指出来原因呢.好吧,springmvc把这个权力交给了用户自己.话不多说了,来一起看看详细的介绍吧. springmvc

  • springboot @Valid注解对嵌套类型的校验功能

    @Valid注解可以实现数据的验证,你可以定义实体,在实体的属性上添加校验规则,而在API接收数据时添加@valid关键字,这时你的实体将会开启一个校验的功能,具体的代码如下,是最基本的应用: 实体: public class DepartmentDto { @ApiModelProperty("id") private String id; @ApiModelProperty("上级Id") private String parentId; @ApiModelPr

  • Spring WebFlux实现参数校验的示例代码

    请求参数校验,在实际的应用中很常见,网上的文章大部分提供的使用注解的方式做参数校验.本文主要介绍 Spring Webflux Function Endpoint 使用 Spring Validation 来校验请求的参数.使用上一篇文章的示例来演示. 使用步骤如下: 1.创建校验器 Validator 2.运用校验器 3.抛出异常,返回 http status 400 错误 PersonValidator.java package com.example.springbootdemo.webf

  • 使用自定义注解进行restful请求参数的校验方式

    目录 自定义注解进行restful请求参数的校验 1.首先我们使用@interface定义一个注解 2.实现注解实现类(和@interface定义的注解在同一个包下) 3.在需要校验的对象的字段上加上@ByteLength注解 springboot小技巧:restful接口参数校验,自定义校验规则 restful风格接口参数校验 自定义参数校验注解方法 自定义注解进行restful请求参数的校验 在使用springmvc开发的时候,我们通常会在controller中的方法参数实体类中加上@Not

  • springboot获取URL请求参数的多种方式

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @param username * @param password * @return */ @RequestMapping("/addUser1") public String addUser1(String username,String password) { System.out.pri

  • SpringMVC中请求参数的获取方式

    目录 SpringMVC请求参数获取方式 一.通过 ServletAPI 获取 二.通过控制器方法的形参获取 处理多个同名的请求参数 三.通过 @RequestParam 注解 四.@RequestHeader 注解 五.@CookieValue 注解 六.通过 POJO 获取请求参数 七.解决获取请求参数的乱码问题 SpringMVC请求参数获取方式 一.通过 ServletAPI 获取 可以使用原生 Servlet 获取请求参数,将 HttpServletRequest 作为控制器方法的形参

  • java接口返回参数按照请求参数进行排序方式

    目录 java接口返回参数按照请求参数进行排序 排序 java通过接口进行排序 描述 知识点 1.Comparable接口 2.Comparator接口 java接口返回参数按照请求参数进行排序 在项目实际开发中可能遇到过这种问题,接口请求参数顺序是[a,b,c],结果返回的数据是[bObject,cObject,aObject],导致这种原因可能是底层采用了设计模式,或者是表拼接查询,本文主要就是为了实现这种功能,采用流的方法 代码实现 import lombok.Data; import j

  • SpringBoot 如何自定义请求参数校验

    目录 一.Bean Validation基本概念 二.基本用法 三.自定义校验 3.1 自定义注解 3.2 自定义Validator 3.3 以编程的方式校验(手动) 3.4 定义分组校验 3.5 定制返回码和消息 3.6 更加细致的返回码和消息 四.小结 最近在工作中遇到写一些API,这些API的请求参数非常多,嵌套也非常复杂,如果参数的校验代码全部都手动去实现,写起来真的非常痛苦. 正好Spring轮子里面有一个Validation,这里记录一下怎么使用,以及怎么自定义它的返回结果. 一.B

  • SpringBoot通过自定义注解实现参数校验

    目录 1. 为什么要进行参数校验 2. 如何实现参数校验 3. 注解实现参数校验 4. 自定义注解实现参数校验 1. 为什么要进行参数校验 在后端进行工作时,需要接收前端传来的数据去数据库查询,但是如果有些数据过于离谱,我们就可以直接把它pass掉,不让这种垃圾数据接触数据库,减小数据库的压力. 有时候会有不安分的人通过一些垃圾数据攻击咱们的程序,让咱们的服务器或数据库崩溃,这种攻击虽然低级但不得不防,就像QQ进行登录请求时,它们向后端发送 账号=123,密码=123 的数据,一秒钟还发1w次,

  • SpringBoot之自定义Filter获取请求参数与响应结果案例详解

    一个系统上线,肯定会或多或少的存在异常情况.为了更快更好的排雷,记录请求参数和响应结果是非常必要的.所以,Nginx 和 Tomcat 之类的 web 服务器,都提供了访问日志,可以帮助我们记录一些请求信息. 本文是在我们的应用中,定义一个Filter来实现记录请求参数和响应结果的功能. 有一定经验的都知道,如果我们在Filter中读取了HttpServletRequest或者HttpServletResponse的流,就没有办法再次读取了,这样就会造成请求异常.所以,我们需要借助 Spring

  • Spring AOP 实现自定义注解的示例

    自工作后,除了一些小项目配置事务使用过 AOP,真正自己写 AOP 机会很少,另一方面在工作后还没有写过自定义注解,一直很好奇注解是怎么实现他想要的功能的,刚好做项目的时候,经常有人日志打得不够全,经常出现问题了,查日志的才发现忘记打了,所以趁此机会,搜了一些资料,用 AOP + 自定义注解,实现请求拦截,自定义打日志,玩一下这两个东西,以下是自己完的一个小例子,也供需要的同学参考. 1. 注解如下: package cn.bridgeli.demo.annotation;   import j

  • Java Spring Controller 获取请求参数的几种方法详解

    Java Spring Controller 获取请求参数的几种方法  1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"="application/x-www-form-urlencoded",可用post提交 url形式:http://localhost:8080/SSMDemo/demo/addUser1?username=lixiaoxi&password=1

  • Spring3 MVC请求参数获取的几种方法小结

    Spring3 MVC请求参数获取的几种方法 一.通过@PathVariabl获取路径中的参数 @RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET) public String printMessage1(@PathVariable String id,@PathVariable String name, ModelMap model) { System.out.println(id); System.ou

随机推荐