Spring Boot 初探

Springboot初探

一、springboot基础

  1. 需要的前置知识:
    1).利用maven构建项目
    2).spring注解
    3).RESTful API
  2. 是spring MVC的升级版,但可以不需要掌握spring mvc
  3. java 和 Maven等版本保持一致

1.第一个springboot程序

  1. 用idea创建一个springboot web程序
    new --> project --> Spring Initalizr --> next -->填写相关的内容 --> 选择web --> 勾选web -->创建成功
    项目结构:

  2. 启动spring boot项目的方式:
    1).在程序中idea直接run Application.java类,在有mvn环境中
    2).进入到项目所在目录,命令: mvn spring-boot:run
    3).先编译程序 mven install
    然后进入target目录,会生成一个jar(项目名-版本号-SNAPSHOT.jar)文件,然后 java -jar 项目名-版本号-SNAPSHOT.jar

2.自定义属性配置

  1. 配置文件为src/main/resources/application.properties
    名字不可变,有些情况下可以使用application.yml
  2. 配置端口 server.prot=8080
    配置项目根路径 server.content-path:/项目名
  3. 配置常用变量 变量名=变量值
    在程序中使用时可以用@Value("${变量名}")来申明使用
  4. 可以配置多个配置文件,使用其中一个配置文件,但是主配置文件仍然是application.properties
    如配置了多个配置文件 application-dev.peoperties 和 application-prod.peoperties,在主配置文件中可以用 spring.profiles.active=dev/prod来决定使用哪个配置文件

总结

@Value  简单配置的取值
@Component  为配置类添加为bean组件
@ConfigurationProperties  为配置类添加配置说明,取得的值是哪一前缀对应的配置值

3.Controller的使用

1 .Controller即用来接客户端的请求的

分类 说明
@Controller 处理http请求
@RestController Spring4之后新加的注解,用来返回json,简化之前的@Controller+@ResponseBody组合
@RequestMapping 配置url映射

2. 说明

  1. 在springboot中使用@RestController即可以做到直接返回json格式
    在使用@Controller需要和@ResponseBody组合才能返回json格式
  2. 直接使用@Controller时,返回的是对项目中某个页面的引用,需要引入模板thymeleaf,并设置响应的html/jsp页面,才能返回页面内容
  3. 可以用@RequestMaping配置每个controller(Controller和RestController)和controller的方法的url
@RquestMapping(value="/hlleo", method=RequestMethod.GET) //配置单映射
@RquestMapping(value={"/hlleo","/hi"},method=RequestMethod.GET) //配置多映射  
其中当不指定method时,get和post方式都可以访问

3. Controller如何处理url中的参数

分类 说明
@PathVariable 获取url中的数据
@RequestParam 获取请求参数的值
@GetMapping/@PostMapping 组合注解

实例如下:
@PathVariable 获取url中的数据

@RequestMapping(value="/say/{id}", method=RequestMethod.GET)
public String say(@PathVariable("id") Integer myid){
	return "id: " + myid;
}
访问 url : localhost:8080/say/100
得到 id: 100

@RequestParam 获取请求参数的值

@RequestMapping(value="/say", method=RequestMethod.GET)
public String say(@("id") Integer myid){
	return "id: " + myid;
}
访问 url : localhost:8080/say?id=100
得到 id: 100

@GetMapping 组合注解

@GetMapping(value="/say") 相当于 
@RequestMapping(value="/say", method=RequestMethod.GET)
@PostMapping(value="/say") 相当于
@RequestMapping(value="/say", method=RequestMethod.POST)

4.spring-data-jpa

JAP(java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate,TopLink等。

5.事务管理

数据库事务:即一系列的mysql操作的集合
@Transactional 即是对事务管理方法的注解方式

二、springboot web

1.springboot表单验证

可以验证传入对象的某些属性的值
可以在对象定义类中对某个属性加对应的注解,如最小值验证

@Min(value=18, message="错误信息")

然后在使用这个类时,需要在前面加@Valid,即可以做到验证对象属性。

2.AOP处理请求

AOP是一种编程范式,与语言无关,一种编程思想

分类 解释
AOP Aspect Oriented Programming 面向切面
OOP Object Oriented Programming 面向对象
POP Procedure Oriented Programming 面向过程
springboot应用AOP

首先需要加入AOP依赖

<dependency>			
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

然后定义一个切面类处理Http请求

@Aspect   //声明为切面
@Component   //加入springbean中,自动注入
public class HttpAspect {
	//用logger的方式打印日志
    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
    
	//声明为公共切面可以省去重复的定义
    @Pointcut("execution(public * com.kk.Controller.GirlController.*(..))")  //拦截这个正则表达式对应的controoler
    public void log(){
    }
    
    @Before("log()")
    public void doBefore(){
        logger.info("before aspect");
    }
    @After("log()")
    public void doAfter(){
        logger.info(" aspect after");
    }
}

3.异常处理

出现异常时和成功时返回的对象应该保持一致,即应该完成对数据的封装和格式的统一,否则调用端口时很难处理。
初步处理异常
一般做如下处理:
1.定义一个返回结果类, 一般定义在domain或model包内
一般包含返回状态码,返回状态描述,返回对象内容,

  public class Result<T> {
    /** 错误码. */
    private Integer code;
    /** 提示信息. */
    private String msg;
    /** 具体的内容. */
    private T data;
   .....
   }

2.返回时应该返回 Result<Object>

@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));
    }

3.优化去除重复代码时应用了一个ResultUtil类

public class ResultUtil {
    public static Result success(Object object){
        Result result = new Result();

        result.setCode(0);
        result.setMsg("成功");
        result.setData(object);
        return result;
    }

    public static Result error(Integer code, String msg){
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}

定义自己的异常类和系统异常区分开

1.定义一个自己的异常类

//继承RuntimeException是因为springboot的异常就是这个
public class GirlException extends RuntimeException {
    private Integer  code;
    public GirlException(Integer code, String message) {
        super(message);
        this.code = code;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
}

2.定义一个捕获异常的类

@ControllerAdvice   //springboot特殊的捕获异常类的注解
public class ExceptionHandle {

    @ExceptionHandler(value=Exception.class)  //捕获的是Exception类型的异常
    @ResponseBody   //为了返回的是json格式
    public Result Handle(Exception e){
        if(e instanceof GirlException){
            GirlException girlException = (GirlException)e;
            return ResultUtil.error(girlException.getCode(),girlException.getMessage());
        }else {
            return ResultUtil.error(-1, "未知错误");
        }
    }
}
原文地址:https://www.cnblogs.com/phtjzzj/p/7542868.html