美文网首页
Springboot2.X 的参数验证和分组验证

Springboot2.X 的参数验证和分组验证

作者: 骑蚂蚁上高速_jun | 来源:发表于2020-08-23 16:04 被阅读0次
  1. 引入验证包 Validate
    springboot 使用 2.3.1.RELEASE 版本
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  1. 定义参数实体验证类 IndexRequest.java
package cn.waimaolang.demo.request.home;

import lombok.Data;
import javax.validation.constraints.*;

@Data
public class IndexRequest {

    // 定义分组验证1
    public static interface Group1 {};
    // 定义分组验证2
    public static interface Group2 {};

    @NotNull(message ="name 不能为空",groups = {Group1.class})
    private String name;

    @NotBlank(message ="password 不能为空")
    private String password;

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public String getEmail() {
        return email;
    }

    @Email(message ="email 格式非法")
    @NotNull(message ="email 不能为空")
    private String email;
}
  1. 控制器调用
    由于该方法仅使用分组1的验证,故仅会验证参数 name, 其他参数不会验证
@RestController
@RequestMapping(value = "home")
public class Index
{
    @PostMapping("/addName")
    public String validate1(
       // 使用分组1 的验证。 
        @Validated(IndexRequest.Group1.class) @RequestBody IndexRequest indexRequest
    ){
        String res = "用户名:"+indexRequest.getName()+
                ",密码:"+indexRequest.getPassword()+
                ",邮箱:"+indexRequest.getEmail();
        return res;
    }
}

4 . 定义全局异常处理类 GlobalWebException 接收异常处理

package cn.waimaolang.demo.exception;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @title web框架全局异常处理类
 */
@RestControllerAdvice
public class GlobalWebException extends ResponseEntityExceptionHandler
{
     // 当产生异常的时候,会触发。并返回到前端
    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(
        MethodArgumentNotValidException ex,
        HttpHeaders headers,
        HttpStatus status,
        WebRequest request
    ) {
        // 获取全部错误
        /*List<String> errors = new ArrayList<>();
        List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
        for(ObjectError error : allErrors){
            errors.add(error.getDefaultMessage());
        }*/
        // 获取一个错误
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("code",-1);
        map.put("msg",ex.getBindingResult().getFieldError().getDefaultMessage());
        return new ResponseEntity(map, status);
    }

}


相关文章

  • Springboot2.X 的参数验证和分组验证

    引入验证包 Validatespringboot 使用 2.3.1.RELEASE 版本 定义参数实体验证类 In...

  • @Validated分组验证和嵌套验证

    最后,最近在使用中遇到了一种情况:如果是保存按钮,保存内容的表单中的某些字段,如果填了,则不能超过50个字符,没填...

  • day47-Django表单验证图片上传和分页技术

    一、表单验证 1.定义验证表单 2.使用表单验证is_valid():验证参数是否有效,如果参数验证成功返回Tru...

  • 机器学习笔记(一)——交叉验证

    交叉验证问题 什么是交叉验证     交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,...

  • 参数验证

    对于参数验证,可以从Request从获取参数进行验证,也可以先将参数封装成pojo类对象,而每个pojo类自身提供...

  • laravel之验证

    控制器验证 $this->validate(验证参数,[验证规则],自定义错误消息提示); 首次验证失败后中止后续...

  • 8.3 django 权限和分组

    权限和分组 登录、注销和登录限制: 登录 在使用authenticate进行验证后,如果验证通过了。那么会返回一个...

  • 最浅显易懂的Django系列教程(47)-权限和分组

    权限和分组 登录、注销和登录限制: 登录 在使用authenticate进行验证后,如果验证通过了。那么会返回一个...

  • 表单(二)

    ● 另一种验证方法---验证器(validator),它的效果和'error_messages'参数类似 以下是...

  • spring boot hibernate validator自

    一个简单的controller如下: 需要验证 helloVo 这个参数 当我前台输入错误的参数后, 验证失败, ...

网友评论

      本文标题:Springboot2.X 的参数验证和分组验证

      本文链接:https://www.haomeiwen.com/subject/ckzijktx.html