解决get请求入参@NotNull验证不生效问题

目录
  • get请求@NotNull验证不生效
    • 解决办法
  • 使用@NotEmpty,@NotBlank,@NotNull及@Valid注解校验请求参数
    • 这里列举一下常用的注解
    • 当校验不同过时,会返回对应的message描述
    • CreateUserRequest 实体类并添加校验注解

get请求@NotNull验证不生效

解决办法

在该方法的controller类上加@Validated

验证信息生效了

使用@NotEmpty,@NotBlank,@NotNull及@Valid注解校验请求参数

@NotEmpty,@NotBlank,@NotNull 这些注解所在的jar包路径在javax.validation.constraints 的包下面,这个包下面也封装了其他的注解

这里列举一下常用的注解

并做简单介绍,其余还要在使用的时候慢慢挖掘

//被注释的元素必须为null
@Null
//被注释的元素不能为null
@NotNull
//被注释的元素必须为true
@AssertTrue
//被注释的元素必须为false
@AssertFalse
//被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Min(value)
//被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Max(value)
//被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMin(value)
//被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMax(value)
//被注释的元素的大小必须在指定的范围内。
@Size(max,min)
//被注释的元素必须是一个数字,其值必须在可接受的范围内
@Digits(integer,fraction)
//被注释的元素必须是一个过去的日期
@Past
//被注释的元素必须是一个将来的日期
@Future
//被注释的元素必须符合指定的正则表达式。
@Pattern(value)
//被注释的元素必须是电子邮件地址
@Email
//被注释的字符串的大小必须在指定的范围内
@Length
//被注释的字符串必须非空
@NotEmpty
//被注释的元素必须在合适的范围内
@Range

这些注解用于加在java的实体类属性字段上,在进行请求或请求的时候会根据字段的注解进行对应的校验,简化校验相关的代码。

当校验不同过时,会返回对应的message描述

在前端请求解析到 controller 的时候,可使用 @valid 注解,开启校验,以下为使用的示例:

   @PostMapping("/get/user/course")
    public UserCourseInfo getUserCourseInfo(@Valid @RequestBody CreateUserRequest request) {
        return userService.getUserCourseInfo(request);
    }

CreateUserRequest 实体类并添加校验注解

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
 * <h1>创建用户请求对象定义</h1>
 * Created by Qinyi.
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CreateUserRequest {
    /** 用户名 */
    @NotNull(message = "不可为空")
    @Length(min=20,max=30,message = "长度在20到30")
    private String username;
    /** 邮箱 */
    @Email
    @NotBlank
    private String email;
}

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

(0)

相关推荐

  • 如何解决Spring in action @valid验证不生效的问题

    解决Spring in action @valid验证不生效 按照书上的示例代码来实现但是,添加了验证但是没有生效. Spring提供了校验Api是使用但是没有提供实现,所以需要自己导入实现包. 所以导入实现包: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.1.Final&

  • spring 注解验证@NotNull等使用方法

    本文介绍了spring 注解验证@NotNull等使用方法,分享给大家,具体如下: 常用标签 @Null  被注释的元素必须为null @NotNull  被注释的元素不能为null @AssertTrue  被注释的元素必须为true @AssertFalse  被注释的元素必须为false @Min(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value)

  • 一次踩坑记录 @valid注解不生效 排查过程

    一.背景 在进行一次Controller层单测时,方法参数违反Validation约束,发现却没有抛出预期的[违反约束]异常. 方法参数上的@Valid注解不生效?? 但是以Tomcatweb容器方式启动,请求该API,@Valid注解却生效了,甚是怪异. 代码如下: @RestController @RequestMapping("/api/user/") public class UserController @RequestMapping(value = ""

  • 解决get请求入参@NotNull验证不生效问题

    目录 get请求@NotNull验证不生效 解决办法 使用@NotEmpty,@NotBlank,@NotNull及@Valid注解校验请求参数 这里列举一下常用的注解 当校验不同过时,会返回对应的message描述 CreateUserRequest 实体类并添加校验注解 get请求@NotNull验证不生效 解决办法 在该方法的controller类上加@Validated 验证信息生效了 使用@NotEmpty,@NotBlank,@NotNull及@Valid注解校验请求参数 @NotE

  • Spring boot如何配置请求的入参和出参json数据格式

    这篇文章主要介绍了spring boot如何配置请求的入参和出参json数据格式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 请求入参数据格式配置,以日期格式为例: 编写日期编辑器类: import first.zxz.tools.DateUtil; import java.beans.PropertyEditorSupport; /** * 日期编辑器 * * @author zhangxz * @date 2019-11-12 20:01

  • springboot 接收List 入参的几种方法

    目录 第一种方式:使用@ModelAttribute 注解 + 对象接收 第二种方式: 使用 @RequestParam 注解接收 第三种方式:利用数组接收 第四种方式: 第五种方式: @RequestBody 加 对象 接收 第六种方式: 接收list<T>对象 第七种方式:  利用String 接收然后参数,然后在后台强转 第一种方式:使用@ModelAttribute 注解 + 对象接收 1. get 请求  入参为 projectIds=1,2,3 2. @RequestMapping

  • 解决java使用axios.js的post请求后台时无法接收到入参的问题

    使用vue有一段时间了,下面是我在Java环境下使用vue+axios的时候遇到的一个坑,在这分享给大家,如有不正确或者疑惑的地方可以给我留言. 1.在使用异步请求后台时,由于官方不在更新vue-resource,推荐使用axios,因此在使用的时候难免会遇到各种问题.目前遇到最大的问题是在使用axios.post的请求向Java后端传入入参时,后端无法接收到参数.在这里主要处理移动端浏览器兼容的问题. 在这里我提供了两种解决办法: 一.URLSearchParams.append()方法 由于

  • vue上传文件formData入参为空,接口请求500的解决

    目录 1.首先封装axios请求 2.vue文件点击上传按钮 接下来贴出解决的方案 long long long time no see,最近遇到个奇葩的问题来记录下,不知道有没有小伙伴和我一样崩溃过. 写了三年代码,上传这么简单的功能.第一次遇到前端入参fromData请求接口报500的问题,百度了好多资料尝试也没有解决.后台一直说我前端的问题,于是debugger一步一步查. 下面来看看报错代码的流程,用你们的丰富经验和火眼金睛帮忙看下到底错在哪里了?! 本项目用的是vue-cli3脚手架搭

  • 解决vue处理axios post请求传参的问题

    很多朋友在使用vue的过程中肯定会用到axios 请求,包括现在vux中已经自带了axios,而且用法也很简单,文档中写的比较清楚,但是当我们使用post提交时,却发现有时候会出现参数没有发送到服务器的问题,我记得文档中也说了这一情况的出现,在这里我把这设置情况记录下来,方便下次需要的时候直接使用.不需要翻阅旧代码了. 下面是vux中的使用方式,很简单,把代码放置在main.js中就可以了.如果仅仅使用了vue的话,直接安装了axios的话,设置方式也雷同,就不记录了. import qs fr

  • SpringBoot打印POST请求原始入参body体方式

    目录 SpringBoot打印POST请求原始入参body体 1.首先定义过滤器配置 2.实现1中的过滤器 Post接收不到body里的参数(对象参数) 检查注解 检查实体 检查Content-Type SpringBoot打印POST请求原始入参body体 1.首先定义过滤器配置 package com.choice.o2o.device.common.config; import com.choice.o2o.device.common.filter.LogFilter; import or

  • vue中使用$http.post请求传参的错误及解决

    目录 使用$http.post请求传参的错误 vue post请求之坑 解决方法 使用$http.post请求传参的错误 在使用$http请求后台,照常我们在后端 使用注解@PostMapper或者 @RequestMapping(value = “XXXX”,method = RequestMethod.POST)接受请求 handleAdd(node) { this.$http.post("/item/category/addCategory",{ node:node }) .th

  • shift妙用之解决shell编程中的入参问题

    我说过了,shell是我的常规武器,目前虽然还不纯熟,但是我爱shell这门语言,在Linux下面混,总要写脚本.程序员是有基因,对编程语言是有偏好的,你让我写C代码,我会觉得很爽,会有困难,会有痛苦的摸索和学习,但是,我愿意:学习shell/python,我也很乐意,甚至Lisp这种冷门的语言我也充满了好奇,虽然现在Go和Erlang我一点也不懂,但是我按耐不住对这两种语言的兴趣,只要我抽出手来,一定会和他们缠绵一番.有爱就会有恨,我痛苦地意识到到自己是个很情绪化的程序员,哪怕我一遍遍地骂自己

  • Spring Boot接收单个String入参的解决方法

    前言 接受参数是我们在日常开发中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于Spring Boot接收单个String入参之解决方案的相关内容,下面话不多说了,来一起看看详细的介绍吧 场景: 在做接口时,有的时候,接口入参只需要一个参数,如果将一个参数封装成一个对象很麻烦,故有了以下方式: 思路: spring自带的参数解析器貌似是不具备这个能力的,所有自定义 方式方法: 1.定义一个注解 @Target(ElementType.PARAMETER) @Retention(Retent

随机推荐