• springboot functions


    1. spring boot 项目启动,如果不配置项目访问路径,默认为 /

    2. 表单验证

    spring项目:

    <properties>           <springframework.version>4.0.6.RELEASE</springframework.version>    <hibernate.validator.version>5.1.2.Final</hibernate.validator.version>
    <javax.validation.version>1.1.0.Final</javax.validation.version>
    </properties>       
    <dependency>
    			<groupId>javax.validation</groupId>
    			<artifactId>validation-api</artifactId>
    			<version>${javax.validation.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.hibernate</groupId>
    			<artifactId>hibernate-validator</artifactId>
    			<version>${hibernate.validator.version}</version>
    		</dependency>

    springboot项目:

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.validation.constraints.Min;
    import javax.validation.constraints.NotNull;
     @NotBlank(message = "这个字段必传")
        private String size;
       @Min(value = 18, message = "禁止入门")
        private Integer age;
     @NotNull(message = "金额必传")
        private Double money;
    @PostMapping(value = "/girls")
        public Result<Girl> girlAdd(@Valid Girl girl, BindingResult bindingResult) {
            if (bindingResult.hasErrors()) {
                return ResultUtil.error(1, bindingResult.getFieldError().getDefaultMessage());
            }
    
            girl.setCupSize(girl.getCupSize());
            girl.setAge(girl.getAge());
    
            return ResultUtil.success(girlRepository.save(girl));
        }
    通过@Valid,BindingResult 验证的时候仅限参数为对象

    //更新
        @PutMapping(value = "/girls/{id}")
        public Girl girlUpdate(@PathVariable("id") Integer id,
                               @RequestParam("cupSize") String cupSize,
                               @RequestParam("age") Integer age) {
            Girl girl = new Girl();
            girl.setId(id);
            girl.setCupSize(cupSize);
            girl.setAge(age);

            return girlRepository.save(girl);
        }
    由于金额上增加了不能为空,这里同样不能通过。
    {
      "code": -1,
      "msg": "未知错误",
      "data": null
    }
    返回这个错误是应为在@Controller注解实用类上增加了异常处理

    3. AOP 获取常用数据

    @Aspect
    @Component
    public class HttpAspect {
    
        private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
    
    
        @Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
        public void log() {
        }
    
        @Before("log()")
        public void doBefore(JoinPoint joinPoint) {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
    
            //url
            logger.info("url={}", request.getRequestURL());
    
            //method
            logger.info("method={}", request.getMethod());
    
            //ip
            logger.info("ip={}", request.getRemoteAddr());
    
            //类方法
            logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
    
            //参数
            logger.info("args={}", joinPoint.getArgs());
        }
    
        @After("log()")
        public void doAfter() {
            logger.info("222222222222");
        }
    
        @AfterReturning(returning = "object", pointcut = "log()")
        public void doAfterReturning(Object object) {
            logger.info("response={}", object.toString());
        }

    4. 异常处理

    import com.imooc.domain.Result;
    import com.imooc.exception.GirlException;
    import com.imooc.utils.ResultUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    /**
     * Indicates the annotated class assists a "Controller".
     * 2017-01-21 13:59
     */
    @ControllerAdvice
    public class ExceptionHandle {
    
        private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
    
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public Result handle(Exception e) {
            if (e instanceof GirlException) {
                GirlException girlException = (GirlException) e;
                return ResultUtil.error(girlException.getCode(), girlException.getMessage());
            }else {
                logger.error("【系统异常】{}", e);
                return ResultUtil.error(-1, "未知错误");
            }
        }
    }

    service 中将异常抛到controller,上诉代码在controller中进行处理

    public void getAge(Integer id) throws Exception{
            Girl girl = girlRepository.findOne(id);
            Integer age = girl.getAge();
            if (age < 10) {
                //返回"你还在上小学吧" code=100
                throw new GirlException(ResultEnum.PRIMARY_SCHOOL);
            }else if (age > 10 && age < 16) {
                //返回"你可能在上初中" code=101
                throw new GirlException(ResultEnum.MIDDLE_SCHOOL);
            }
    
            //如果>16岁,加钱
            //...
        }

     http最外层对象

    /**
     * http请求返回的最外层对象
     * 2017-01-21 13:34
     */
    public class Result<T> {
    
        /** 错误码. */
        private Integer code;
    
        /** 提示信息. */
        private String msg;
    
        /** 具体的内容. */
        private T data;

    5.springboot test

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class GirlServiceTest {
    
        @Autowired
        private GirlService girlService;
    
        @Test
        public void findOneTest() {
            Girl girl = girlService.findOne(73);
            Assert.assertEquals(new Integer(13), girl.getAge());
        }
    }
  • 相关阅读:
    golang 简单的实现内 网 穿 透,用户访问本地服务。
    golang 创建一个简单的广播echo服务器
    golang 使用 protobuf 的教程
    golang语言中os包的学习与使用(文件,目录,进程的操作)
    【原】画流程图工具visio使用技巧汇总
    【改】IOS-百度地图API用点生成线路、导航、自定义标注 2013年11月更新
    【原】xcode5&IOS7及以下版本免证书真机调试记录
    【转】C++的拷贝构造函数深度解读,值得一看
    【转】c++中引用的全方位解读
    【转】self.myOutlet=nil、viewDidUnload、dealloc的本质剖析
  • 原文地址:https://www.cnblogs.com/yangfei-beijing/p/6629263.html
Copyright © 2020-2023  润新知