• 整合Swagger2文档API 和 整合log4j打印日志


    一、整合Swagger2文档API

       1、pom.xml引入依赖

     <!-- swagger2配置-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.4.0</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.4.0</version>
            </dependency>
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>swagger-bootstrap-ui</artifactId>
                <version>1.6</version>
            </dependency>
    引入依赖 swagger2配置

      2、添加扫描配置类 Swagger2 .java

       

    package com.imooc.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    
    @Configuration
    @EnableSwagger2
    public class Swagger2 {
    
        //http://localhost:8088/swagger-ui.html
        @Bean
         public Docket createRestApi() {
    
             return new Docket(DocumentationType.SWAGGER_2)
                     .apiInfo(apiInfo())
                     .select()
                     .apis(RequestHandlerSelectors.basePackage("com.imooc.controller"))
                     .paths(PathSelectors.any())
                     .build();
    
         }
    
         private ApiInfo apiInfo() {
    
             return new ApiInfoBuilder()
                     .title("电商平台API")
                     .contact(new Contact("imooc","http://www.imooc.com","aaa@imooc.com"))
                     .description("API 文档")
                     .version("1.0.1")
                     .termsOfServiceUrl("http://www.imooc.com")
                     .build();
         }
    }
    配置类

      3、Controller层 Swagger Api 使用

    package com.imooc.controller;
    import com.imooc.pojo.Users;
    import com.imooc.pojo.bo.UserBO;
    import com.imooc.service.UserService;
    import com.imooc.utils.CookieUtils;
    import com.imooc.utils.IMOOCJSONResult;
    import com.imooc.utils.JsonUtils;
    import com.imooc.utils.MD5Utils;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @Api(value = "注册登录",tags = "用于注册和登录的相关接口")
    @RestController
    @RequestMapping("passport")
    public class PassportController {
    
        @Autowired
        private UserService userService;
    
        @ApiOperation(value="用户名是否存在",notes = "用户名是否存在",httpMethod = "GET")
        @GetMapping("/usernameIsExist")
        public IMOOCJSONResult usernameIsExist(@RequestParam String username){
             //1.
            if(StringUtils.isBlank(username)) {
                return IMOOCJSONResult.errorMsg("用户名不能为空");
            }
            //2.
            boolean isExist=userService.queryUsernameIsExist(username);
            if (isExist) {
                return IMOOCJSONResult.errorMsg("用户名已经存在");
            }
            //3.请求成功
            return IMOOCJSONResult.ok();
        }
    
        @ApiOperation(value="用户注册",notes = "用户注册",httpMethod = "POST")
        @PostMapping("/regist")
        public IMOOCJSONResult regist(@RequestBody UserBO userBO){
            String username = userBO.getUsername();
            String password = userBO.getPassword();
            String confirmPwd=userBO.getConfirmPassword();
    
              //0
            if(StringUtils.isBlank(username) ||
                    StringUtils.isBlank(password)||
                    StringUtils.isBlank(confirmPwd)){
                return IMOOCJSONResult.errorMsg("用户名或密码不能为空");
            }
    
             //1
            boolean isExist=userService.queryUsernameIsExist(username);
            if (isExist) {
                return IMOOCJSONResult.errorMsg("用户名已经存在");
            }
            //2
              if(password.length()<6) {
                  return IMOOCJSONResult.errorMsg("用户密码不能少于6位");
              }
            //3
            //2
            if(!password.equals(confirmPwd)) {
                return IMOOCJSONResult.errorMsg("两次密码不一致");
            }
            //4
             userService.creatUser(userBO);
    
            return IMOOCJSONResult.ok();
        }
    
        @ApiOperation(value="用户登录",notes = "用户登录",httpMethod = "POST")
        @PostMapping("/login")
        public IMOOCJSONResult login(@RequestBody UserBO userBO, HttpServletRequest request, HttpServletResponse response) throws Exception{
            String username = userBO.getUsername();
            String password = userBO.getPassword();
            //String confirmPwd=userBO.getConfirmPassword();
    
            //0
            if(StringUtils.isBlank(username) ||
                    StringUtils.isBlank(password)
                    ){
                return IMOOCJSONResult.errorMsg("用户名或密码不能为空");
            }
    
    
           Users user= userService.queryUserForLogin(username,
                   MD5Utils.getMD5Str(password));
    
            if(user==null) {
                return IMOOCJSONResult.errorMsg("用户名和密码不正确");
            }
    
            user=setNullProperty(user);
    
            CookieUtils.setCookie(request, response,"user",
                    JsonUtils.objectToJson(user),true);
    
            return IMOOCJSONResult.ok(user);
        }
    
        @ApiOperation(value="用户退出登录",notes = "用户退出登录",httpMethod = "POST")
        @PostMapping("/logout")
        public IMOOCJSONResult logout(@RequestParam String userId,HttpServletRequest request, HttpServletResponse response){
    
            //1
            CookieUtils.deleteCookie(request, response, "user");
            //TODO 用户退出登录,需要清空购物车
            //TODO 分布式会话中需要清除用户数据
            //2
            return IMOOCJSONResult.ok();
        }
         private  Users setNullProperty(Users user)
         {
             user.setPassword(null);
             user.setNickname(null);
             user.setCreatedTime(null);
             return user;
    
         }
    
    }
    View Code

    4、访问地址:http://localhost:8088/doc.html

            http://localhost:8088/swagger-ui.html

        优化后地址

            http://localhost:8088/doc.html

    二、整合log4j打印日志

     1、pom.xml引入依赖

        (1)移除默认日志

         spring Boot默认使用Logback日志框架来记录日志,并用INFO级别输出到控制台,所以我们在引入Log4j之前,需要先排除该包的依赖,在引入Log4j的依赖。

    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>

        (2)添加日志框架依赖

           

       <!-- 引入日志依赖 抽象层 与 实现层-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.30</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.21</version>
            </dependency>
        </dependencies>
    View Code

     2、创建 log4j.properties 并且放到资源文件目录 src/main/resource

        

    log4j.rootLogger=DEBUG,stdout,file
    log4j.additivity.org.apache=true
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.threshold=INFO
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%-5p %c{1}:%L - %m%n
    
    log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    log4j.appender.file.Threshold=INFO
    log4j.appender.file.append=true
    log4j.appender.file.File=/workspaces/logs/foodie-api/imooc.log
    log4j.properties

      3、使用

    package com.imooc.controller;
    
    import io.swagger.annotations.Api;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import springfox.documentation.annotations.ApiIgnore;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    
    @ApiIgnore
    @RestController
    public class HelloController {
    
        final  static Logger logger= LoggerFactory.getLogger(HelloController.class);
    
        @GetMapping("/hello")
        public Object hello(){
    
            logger.info("info:hello~");
            logger.debug("debug:hello~");
            logger.warn("warn:hello~");
            logger.error("error:hello~");
    
    
            return "Hello World";
        }
    }
    示例代码
  • 相关阅读:
    微信 JS SDK 的 chooseImage 接口在部分安卓机上容易造成页面刷新
    规约模式Specification Pattern
    ASP.NET Core 1.0基础之日志
    C# 7 新特性-2
    C# 7 新特性-1
    ASP.NET Core 1.0基础之诊断
    ASP.NET Core 1.0基础之依赖注入
    ASP.NET Core 1.0 基础之配置
    ASP.NET Core 1.0基础之静态文件处理
    FreeSql生产环境自动升级数据库解决方案
  • 原文地址:https://www.cnblogs.com/callbin/p/14482258.html
Copyright © 2020-2023  润新知