zoukankan      html  css  js  c++  java
  • springboot(1)

    一。标签

    @PathVariable:获取url中的参数 例如:http://localhost:8090/girl/say/1 

    @RequestMapping(value="/say/{id}", method=RequestMethod.GET)
        public String say(@PathVariable(value = "id") Integer id) {
            return "id:"+id;
        }

    @RequestParam: 获取http://localhost:8090/girl/say?id=1

    @Value : 读取application.yml中的配置项

    @ConfigurationProperties:从application.yml中的配置项封装到类

    @Component
    @ConfigurationProperties(prefix = "girl")
    public class Girl {
        private String cupSize;
        private String age;
        public String getCupSize() {
            return cupSize;
        }
        public void setCupSize(String cupSize) {
            this.cupSize = cupSize;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
    }
    girl:
      cupSize: F
      age: 20

     二。AOP拦截器

    @Aspect,@Before,@After,@AfterReturning
    @Aspect
    @Component
    public class HttpAspect {
        Logger log = LoggerFactory.getLogger(this.getClass());
        
        @Pointcut("execution(public * com.yjm.test1.controller.GirlController.*(..))")
        public void log() {
            
        }
        @Before("log()")
        public void beforeLog(JoinPoint joinPoint) {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            // url 
            log.info("url={}", request.getRequestURL());
            //method
            log.info("method={}", request.getMethod());
            //ip
            log.info("ip={}", request.getRemoteAddr());
            //class
            log.info("class={}", joinPoint.getClass()+"."+joinPoint.getSignature().getDeclaringTypeName());
            //参数
            log.info("args={}", joinPoint.getArgs());
            
            log.info("beforeLog !!!");
        }
        
        @After("log()")
        public void afterLog() {
            log.info("afterLog !!!");
        }
        @AfterReturning(returning = "object", pointcut = "log()")
        public void returnLog(Object object) {
            log.info("return={}", object.toString());
        }

    三。表单校验

    @Valid

    首先实体类中使用@Size,@Max,@Min等条件约束

    @Size(min = 1,max = 1)
    private String cupSize;

    再在control层 用@Valid和BindingResult 来校验并获取错误信息

    @RequestMapping(value = "/girls", method = RequestMethod.POST)
        public Result addOne(@Valid Girl girl, BindingResult bindingResult){
            if(bindingResult.hasErrors()) {
                logger.error(bindingResult.getFieldError().getDefaultMessage());
                return ResultUtil.error(1, bindingResult.getFieldError().getDefaultMessage());
            }
            return ResultUtil.success(girlRespository.save(girl));
        }

    四。统一异常处理

    1.自定义异常

    public class GirlException extends RuntimeException {
        private Integer code;
        public GirlException(Integer code, String msg) {
            super(msg);
            this.code = code;
        }
        public Integer getCode() {
            return code;
        }
        public void setCode(Integer code) {
            this.code = code;
        }
    }

    2.定义异常处理类

    @ControllerAdvice
    public class ExceptionHandle {
        Logger logger = LoggerFactory.getLogger(this.getClass());
        
        @ExceptionHandler(Exception.class)
        @ResponseBody
        public Result handle(Exception e) {
            if(e instanceof GirlException) {
                return ResultUtil.error(((GirlException) e).getCode(),e.getMessage());
            } else {
                logger.error("未知错误", e);
                return ResultUtil.error(-1, "未知错误");
            }
        }
    }
    @ControllerAdvice:controller增强处理
    抛出异常都会先走这里

    五。返回json中忽略null
    5.1全局配置
    sping:
      jackson:
        default-property-inclusion: non_null

    5.2 单独类配置

    @JsonInclude(Include.NON_NULL)
    public class WithdrawDetail implements Serializable {
    
    }
  • 相关阅读:
    MySQL · 引擎特性 · InnoDB 事务锁简介
    锁大全与 GDB调试
    docker(4):coreos+docker+rancher真厉害
    TIDB ---NEW SQL
    Linux的内存回收和交换
    TLS握手优化详解
    北风网JAVA 大数据培训
    MySQL 5.7 深度解析: JSON数据类型使用
    MySQL 5.7 深度解析: 临时表空间
    在Linux最大打开文件数限制下 MySQL 对参数的调整
  • 原文地址:https://www.cnblogs.com/t96fxi/p/12390969.html
Copyright © 2011-2022 走看看