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());

    
    
  • 相关阅读:
    HDU 1069 Monkey and Banana
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    Gym100923H Por Costel and the Match
    Codeforces 682C Alyona and the Tree
    Codeforces 449B Jzzhu and Cities
    Codeforces (ccpc-wannafly camp day2) L. Por Costel and the Semipalindromes
    Codeforces 598D (ccpc-wannafly camp day1) Igor In the Museum
    Codeforces 1167c(ccpc wannafly camp day1) News Distribution 并查集模板
    快乐数问题
  • 原文地址:https://www.cnblogs.com/jiliunyongjin/p/7424758.html
Copyright © 2011-2022 走看看