栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot参数校验统一异常返回

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot参数校验统一异常返回

一、添加依赖

		org.springframework.boot
		spring-boot-starter-validation


二、注解说明

三、对实体类进行校验 1、do
@Data
public class User {
    @NotNull(message = "用户账号不能为空")
    @Size(min = 6, max = 11, message = "账号长度必须是6-11个字符")
    private String account;

    @NotNull(message = "用户密码不能为空")
    @Size(min = 6, max = 11, message = "密码长度必须是6-16个字符")
    private String password;
}

2、controller
@RestController
public class UserController {

    @PostMapping("/CreateUser")
    public void CreateUser(@RequestBody @Validated User user) {
		 System.out.println("hello");
    }
}

3、编写全局统一异常处理
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.stream.Collectors;


@RestControllerAdvice
public class ExceptionConfig {

    
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Object handleValidException(MethodArgumentNotValidException e) {
      JSONObject json = new JSONObject();
        json.put("path", req.getRequestURI());
        String defaultMessage = exception.getBindingResult().getFieldError().getDefaultMessage();
        json.put("code",400);
        json.put("success", false);
        json.put("msg",defaultMessage);
        json.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        return json;
    }

    
    @ExceptionHandler(value = ConstraintViolationException.class)
    public String handleConstraintViolationException(ConstraintViolationException e) {
         //获取参数校验异常message
        String message = exception.getLocalizedMessage().split(": ")[1];
        JSONObject json = new JSONObject();
        json.put("path", req.getRequestURI());
        json.put("code",400);
        json.put("success", false);
        json.put("msg",message);
        return json;
    }
     
    @ExceptionHandler(value = BindException.class)
    public Object validatedGetException(HttpServletRequest req, BindException exception){
        JSONObject json = new JSONObject();
        json.put("path", req.getRequestURI());
        String defaultMessage = exception.getBindingResult().getFieldError().getDefaultMessage();
        json.put("code",400);
        json.put("success", false);
        json.put("msg",defaultMessage);
        json.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        return json;
    }

}

四、针对单个参数进行校验
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.constraints.NotNull;

@RestController
@Validated
public class UserController {

    @PostMapping("/query")
    public void query(@NotNull(message = "id不能为空") Integer id) {
    }
}

五、配置Springboot校验模式
package com.zkzx.layer.config;

import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;


@Configuration
public class ValidatorConfig {

    
    @Bean
    public Validator validator() {
        ValidatorFactory validatorFactory = Validation
                .byProvider(HibernateValidator.class)
                .configure()
                .failFast(true)
                .buildValidatorFactory();
        Validator validator = validatorFactory.getValidator();
        return validator;
    }

}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号