若依学习笔记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();
    }

}
相关推荐
TPBoreas几秒前
springboot我们项目中的常见注解
java·spring boot·后端
05候补工程师2 分钟前
【408考研复习】数据结构核心笔记:字符串模式匹配与内部排序算法全解析
数据结构·经验分享·笔记·考研·算法·排序算法
asdfg12589633 分钟前
三层架构(Controller-Service-DAO)模式中的controller 和 dao/mapper的通俗理解
java·架构模式
真实的菜3 分钟前
Nacos单机部署入门:避坑指南与实战
java
问心无愧05137 分钟前
ctf show web入门107
android·前端·笔记·android studio
霸道流氓气质8 分钟前
JWT 认证全面解析:原理、流程与 Spring Boot 实战
java·spring boot·后端
一尘之中8 分钟前
基于架构的软件开发方法
学习·架构·ai写作
TeamDev9 分钟前
JxBrowser 9.1.2 版本发布啦!
java·跨平台·混合应用·jxbrowser·浏览器控件·compose 多平台
逢君学术论文AI写作10 分钟前
Java第21课:JavaWeb入门——Tomcat+第一个Servlet
java·servlet·tomcat
chase。10 分钟前
【学习笔记】面向机器人食物舀取的 spillage-aware 引导扩散策略
笔记·学习·机器人