若依学习笔记1-validated

复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
               <!-- 保证 Spring AOP 相关的依赖包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

异常配置 统一拦截

复制代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

@ControllerAdvice(basePackages = "com.gouying.demos.web")
public class GlobalExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(getClass());



    /**
     * 处理 MissingServletRequestParameterException 异常
     *
     * SpringMVC 参数不正确
     */
    @ResponseBody
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Object missingServletRequestParameterExceptionHandler(HttpServletRequest req, MethodArgumentNotValidException ex) {
        logger.debug("[missingServletRequestParameterExceptionHandler]", ex);


        StringBuilder detailMessage = new StringBuilder();
        for (ObjectError objectError : ex.getAllErrors()) {
            // 使用 ; 分隔多个错误
            if (detailMessage.length() > 0) {
                detailMessage.append(";");
            }
            // 拼接内容到其中
            detailMessage.append(objectError.getDefaultMessage());
        }
        System.out.println(detailMessage);
        // 包装 CommonResult 结果
        return detailMessage;
    }

}

这个类可以处理返回值

  • 不是Result类的返回Result

  • 想要更改数据这里也可以

    import org.springframework.core.MethodParameter;
    import org.springframework.http.MediaType;
    import org.springframework.http.server.ServerHttpRequest;
    import org.springframework.http.server.ServerHttpResponse;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

    // 只拦截我们的 Controller 所在包,避免其它类似 swagger 提供的 API 被切面拦截
    @ControllerAdvice(basePackages = "com.gouying.demos.web")
    public class GlobalResponseBodyHandler implements ResponseBodyAdvice {

    复制代码
      @Override
      public boolean supports(MethodParameter returnType, Class converterType) {
          return true;
      }
    
      @Override
      public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType,
                                    ServerHttpRequest request, ServerHttpResponse response) {
          // 如果已经是 CommonResult 类型,则直接返回
          System.out.println(String.valueOf(body));
          // 如果不是,则包装成 CommonResult 类型
          return "success";
      }

    }

controller

复制代码
@Validated
@Controller
public class BasicController {

    // curl -H "Content-Type: application/json" -X POST -d '{"name":"123"}' "http://127.0.0.1:8888/hello"
    @PostMapping("/hello")
    @ResponseBody
    public String hello(@Valid @RequestBody  User user) {
        return user.getName();
    }

}
相关推荐
Larry_Yanan15 分钟前
QML学习笔记(十七)QML的属性变更信号
javascript·c++·笔记·qt·学习·ui
eqwaak035 分钟前
Flask实战指南:从基础到高阶的完整开发流程
开发语言·后端·python·学习·flask
GilgameshJSS37 分钟前
STM32H743-ARM例程9-IWDG看门狗
c语言·arm开发·stm32·单片机·嵌入式硬件·学习
Hello_Embed1 小时前
STM32 智能垃圾桶项目笔记(一):超声波模块(HC-SR04)原理与驱动实现
c语言·笔记·stm32·单片机·嵌入式软件·嵌入式项目
海琴烟Sunshine1 小时前
Leetcode 26. 删除有序数组中的重复项
java·算法·leetcode
RoboWizard1 小时前
移动固态硬盘连接手机无法读取是什么原因?
java·spring·智能手机·电脑·金士顿
笨蛋不要掉眼泪1 小时前
SpringBoot项目Excel成绩录入功能详解:从文件上传到数据入库的全流程解析
java·vue.js·spring boot·后端·spring·excel
月盈缺2 小时前
学习嵌入式的第四十一天——ARM——时钟与定时器
arm开发·学习
wshzrf2 小时前
【Java系列课程·Java学前须知】第3课 JDK,JVM,JRE的区别和优缺
java·开发语言·jvm
铅笔侠_小龙虾2 小时前
JVM 深入研究 -- 详解class 文件
java·开发语言·jvm