• springboot结合@Validated全局异常捕捉


    一、引入依赖

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

    二、全局异常捕捉类

    1. package com.cqec.admin.advice;
    2. import com.cqec.common.base.BaseResult;
    3. import com.cqec.common.constant.PlatforEnums;
    4. import com.cqec.common.exception.BusinessException;
    5. import lombok.extern.slf4j.Slf4j;
    6. import org.springframework.dao.DuplicateKeyException;
    7. import org.springframework.dao.OptimisticLockingFailureException;
    8. import org.springframework.http.HttpStatus;
    9. import org.springframework.validation.BindException;
    10. import org.springframework.validation.ObjectError;
    11. import org.springframework.web.bind.MethodArgumentNotValidException;
    12. import org.springframework.web.bind.annotation.ExceptionHandler;
    13. import org.springframework.web.bind.annotation.RestControllerAdvice;
    14. import javax.servlet.http.HttpServletRequest;
    15. import javax.validation.ConstraintViolation;
    16. import javax.validation.ConstraintViolationException;
    17. import java.util.stream.Collectors;
    18. /**
    19. *

    20. * 业务异常统一拦截处理
    21. *

    22. *
    23. * @author woo
    24. * @since 2019/12/29
    25. */
    26. @RestControllerAdvice
    27. @Slf4j
    28. public class UnityExceptionHandler {
    29. /**
    30. * 分割符
    31. */
    32. private static final String SEP_COMMA = ",";
    33. /**
    34. * bean参数验证 带requestbody的方式.
    35. *
    36. * @param ex RuntimeException
    37. * @return String
    38. */
    39. @ExceptionHandler(MethodArgumentNotValidException.class)
    40. public BaseResult validExceptionHandler(MethodArgumentNotValidException ex) {
    41. return BaseResult.fail(HttpStatus.BAD_REQUEST.value()+"", ex.getBindingResult().getAllErrors().stream().map(ObjectError::getDefaultMessage)
    42. .collect(Collectors.joining(",")));
    43. }
    44. /**
    45. * bean参数验证.
    46. *
    47. * @param ex RuntimeException
    48. * @return String
    49. */
    50. @ExceptionHandler(BindException.class)
    51. public BaseResult validExceptionHandler(BindException ex) {
    52. return BaseResult.fail(HttpStatus.BAD_REQUEST.value()+"", ex.getAllErrors().stream().map(ObjectError::getDefaultMessage)
    53. .collect(Collectors.joining(SEP_COMMA)));
    54. }
    55. /**
    56. * 单个参数验证.
    57. *
    58. * @param ex RuntimeException
    59. * @return String
    60. */
    61. @ExceptionHandler(ConstraintViolationException.class)
    62. public BaseResult validExceptionHandler(ConstraintViolationException ex) {
    63. return BaseResult.fail(HttpStatus.BAD_REQUEST.value()+"", ex.getConstraintViolations().stream().map(ConstraintViolation::getMessage)
    64. .collect(Collectors.joining(SEP_COMMA)));
    65. }
    66. }

    三、准备实体类和controller

    实体类

    1. package com.cqec.admin.mapper.entity;
    2. import javax.validation.constraints.NotBlank;
    3. import java.util.Date;
    4. @Data
    5. public class User{
    6. /**
    7. * id
    8. */
    9. private Long id;
    10. /**
    11. * 名字
    12. */
    13. @NotBlank(message = "名字不能为空")
    14. private String name;
    15. /**
    16. * 电话号码
    17. */
    18. @NotBlank(message = "电话号码不能为空")
    19. private String phone;
    20. }

    controller类

    1. import com.cqec.admin.manager.TokenManager;
    2. import com.cqec.admin.mapper.entity.ChildWaterMeterTable;
    3. import com.cqec.admin.request.ChildWaterMeterInfoPageRequestVO;
    4. import com.cqec.admin.request.WaterMeterCoverSendOrderRequest;
    5. import com.cqec.admin.request.WaterMeterDataImageRequestVO;
    6. import com.cqec.admin.resultVO.ChildWaterMeterInfoResultVO;
    7. import com.cqec.admin.resultVO.WaterMeterDataImageResultVO;
    8. import com.cqec.admin.service.WaterMeterCoverService;
    9. import com.cqec.admin.util.TokenUtil;
    10. import com.cqec.common.base.BasePageResultDto;
    11. import com.cqec.common.base.BaseResult;
    12. import org.springframework.beans.factory.annotation.Autowired;
    13. import org.springframework.validation.annotation.Validated;
    14. import org.springframework.web.bind.annotation.*;
    15. import org.springframework.web.multipart.MultipartFile;
    16. import javax.servlet.http.HttpServletRequest;
    17. import javax.servlet.http.HttpServletResponse;
    18. import java.util.List
    19. @RestController
    20. @RequestMapping("/user")
    21. public class WaterMeterCoverController {
    22. /**
    23. * 新增用户
    24. * @param childWaterMeterTable
    25. * @return
    26. */
    27. @PostMapping("/addWaterMeterCover")
    28. public BaseResult addChildWaterMeter(@Validated @RequestBody User user){
    29. return user;
    30. }
    31. }

    如果name和phone不传 会返回 

    {

        "code": "400",

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

        "data": null

    }

  • 相关阅读:
    docker之数据卷(Data Volumes)&dockerfile
    【SQL性能优化】从数据页的角度理解B+树查询
    VirtuaLab Fusion新版本:从光线光学到物理光学的无缝转换
    七、JavaScript:DOM对象、元素选择器
    c++系列之vector类模拟实现
    228 基于matlab的神经网络人脸识别
    文件批量重命名加前缀的方法
    leetcode 15. 三数之和
    基于Nodejs+vue开发实现酒店管理系统
    数据结构-带头双向循环链表(增删查改)(2)
  • 原文地址:https://blog.csdn.net/liaoxiaolin520/article/details/128003814