zoukankan      html  css  js  c++  java
  • SpringBoot进阶之web进阶

    1.表单验证:

    实体类添加:
    @Min(value = 18 ,message = "未成年少女禁止入内!")最小值限制为18,如果小于18则返回message中的信息
    注入校验,获得校验结果信息
    public Girl girlAdd(@Valid  Girl girl , BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            System.out.println(bindingResult.getFieldError().getDefaultMessage());
            return  null;
        }
        girl.setCupSize(girl.getCupSize());
        girl.setAge(girl.getAge());
        return girlRepository.save(girl);
    }
    BindingResult 验证不通过时进行返回信息的对象

    2.使用AOP处理请求
    AOP
    将通用逻辑从业务逻辑中分离出来
    使用AOP第一步,添加依赖:
    
    spring-boot-starter-aop

    使用拦截器实例:

    拦截器的改进写法:
    
    为了避免代码重复书写,定义一个公用方法,@Pointcut注解声明切入点
    @Before @After 两注解直接复用该方法切入点
    @Aspect
    @Component
    public class HttpAspect {
        private final static Logger logger= LoggerFactory.getLogger(HttpAspect.class);
    
        @Pointcut("execution(public * com.example.project.web.CustomerContorller.*(..))")
        public void log(){
        }
        @Before("log()")
        public void doBefore(){
            logger.info("aaaa");
    
        }
        @After("log()")
        public void doAfter(){
            logger.info("bbbb");
        }
    
    }

    拦截请求:

    @Before("log()")
        public void doBefore(JoinPoint joinPoint) {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = (HttpServletRequest) attributes.getRequest();
            logger.info("url={}", request.getRequestURL());
            logger.info("method={}", request.getMethod());
            logger.info("ip={}", request.getRemoteAddr());
            logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
            logger.info("args ={}", joinPoint.getArgs());
    
            logger.info("111111111111111111111111111111");
        }
    
        @AfterReturning(returning = "object", pointcut = "log()")//获取请求结果的内容
        public void doAfterReturn(Object object) {
            logger.info("response={}", object);
        }
    把请求的返回结果写成工具类:

    3.统一异常处理

    自定义异常类:为什么要继承,因为spring只对RunTimeException进行事务回滚

    业务层直接向外抛异常:

    自定义异常处理类:遮盖部分是getMessage()

    自定义枚举类,统一异常的管理:
    
        没有set方法哦,因为不需要set

    4.单元测试:

    三个注解为,
    1. @RunWith(SpringRunner.class)现在要在测试环境中跑,底层使用的是junit测试工具
    2. @SpringBootTest   将启动整个spring工程
    3. @AutoConfigureMockMvc

    mock:仿制 perform:执行
    自动注入后,调用mockMvc.perform(MockMvcRequestBuilders.get("[url]")).andExpect(MockMvcResultMatchers.status().isOk());

    
    
  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/jiliunyongjin/p/7424758.html
Copyright © 2011-2022 走看看