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

}
相关推荐
东东5168 小时前
xxx医患档案管理系统
java·spring boot·vue·毕业设计·智慧城市
A9better8 小时前
嵌入式开发学习日志53——互斥量
stm32·嵌入式硬件·学习
一个响当当的名号9 小时前
lectrue9 索引并发控制
java·开发语言·数据库
进阶小白猿9 小时前
Java技术八股学习Day30
java·开发语言·学习
近津薪荼9 小时前
优选算法——双指针6(单调性)
c++·学习·算法
三水不滴9 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
修修修也9 小时前
【无标题】技术欲望是怎样渐进增长的?
学习
hhy_smile9 小时前
Class in Python
java·前端·python
whale fall10 小时前
celery -A tool.src.main worker --loglevel=info --queues=worker1_queue & 什么意思
python·学习·apache
qq_124987075310 小时前
基于Srpingboot心晴疗愈社平台的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·spring·microsoft·毕业设计·计算机毕业设计