知行合一

博客园 首页 新随笔 联系 订阅 管理

一、整合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";
    }
}
示例代码

 

posted on 2021-03-04 18:26  callbin  阅读(612)  评论(0编辑  收藏  举报