springboot结合@Validated全局异常捕捉

一、引入依赖

<!-- 验证参数 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

二、全局异常捕捉类

package com.cqec.admin.advice;

import com.cqec.common.base.BaseResult;
import com.cqec.common.constant.PlatforEnums;
import com.cqec.common.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.dao.OptimisticLockingFailureException;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
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.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.stream.Collectors;

/**
 * <p>
 * 业务异常统一拦截处理
 * </p>
 *
 * @author woo
 * @since 2019/12/29
 */
@RestControllerAdvice
@Slf4j
public class UnityExceptionHandler {

    /**
     * 分割符
     */
    private static final String SEP_COMMA = ",";


    /**
     * bean参数验证 带requestbody的方式.
     *
     * @param ex RuntimeException
     * @return String
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public BaseResult validExceptionHandler(MethodArgumentNotValidException ex) {
        return BaseResult.fail(HttpStatus.BAD_REQUEST.value()+"", ex.getBindingResult().getAllErrors().stream().map(ObjectError::getDefaultMessage)
                .collect(Collectors.joining(",")));
    }

    /**
     * bean参数验证.
     *
     * @param ex RuntimeException
     * @return String
     */
    @ExceptionHandler(BindException.class)
    public BaseResult validExceptionHandler(BindException ex) {
        return BaseResult.fail(HttpStatus.BAD_REQUEST.value()+"", ex.getAllErrors().stream().map(ObjectError::getDefaultMessage)
                .collect(Collectors.joining(SEP_COMMA)));
    }

    /**
     * 单个参数验证.
     *
     * @param ex RuntimeException
     * @return String
     */
    @ExceptionHandler(ConstraintViolationException.class)
    public BaseResult validExceptionHandler(ConstraintViolationException ex) {
       return BaseResult.fail(HttpStatus.BAD_REQUEST.value()+"", ex.getConstraintViolations().stream().map(ConstraintViolation::getMessage)
                .collect(Collectors.joining(SEP_COMMA)));
    }

    
}

三、准备实体类和controller

实体类

package com.cqec.admin.mapper.entity;

import javax.validation.constraints.NotBlank;
import java.util.Date;

@Data
public class User{
    /**
     * id
     */
    private Long id;

  

    /**
     * 名字
     */
    @NotBlank(message = "名字不能为空")
    private String name;

    /**
     * 电话号码
     */
    @NotBlank(message = "电话号码不能为空")
    private String phone;

    
}

controller类

import com.cqec.admin.manager.TokenManager;
import com.cqec.admin.mapper.entity.ChildWaterMeterTable;
import com.cqec.admin.request.ChildWaterMeterInfoPageRequestVO;
import com.cqec.admin.request.WaterMeterCoverSendOrderRequest;
import com.cqec.admin.request.WaterMeterDataImageRequestVO;
import com.cqec.admin.resultVO.ChildWaterMeterInfoResultVO;
import com.cqec.admin.resultVO.WaterMeterDataImageResultVO;
import com.cqec.admin.service.WaterMeterCoverService;
import com.cqec.admin.util.TokenUtil;
import com.cqec.common.base.BasePageResultDto;
import com.cqec.common.base.BaseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List
@RestController
@RequestMapping("/user")
public class WaterMeterCoverController {
/**
     * 新增用户
     * @param childWaterMeterTable
     * @return
     */
    @PostMapping("/addWaterMeterCover")
    public BaseResult<User> addChildWaterMeter(@Validated @RequestBody User user){
        
        return user;
    }
}

如果name和phone不传 会返回 

{

    "code": "400",

    "message": "名字不能为空,电话号码不能为空",

    "data": null

}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值