1:更换Maven默认中心仓库的方法

<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

2:相关代码

如果要用到view页面需要引入

  1. <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  2.  
  3. 用数据库和jpa需要引入以下依赖
  1. <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
  2.  
  3. <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
    </dependency>

@RestController//返回json,@Controller返回view    @RestController等同于@Controller和@ResponseBody
@RequestMapping("/hello") // 可以省略
public class HelloController {

@value("${mytest}")

private string test;

//上面同下面两种方式注入配置

@Autowired
private GirlProperties girlProperties;

@RequestMapping(value="say",method = RequestMethod.GET)
public String say(){
return girlProperties.getCupSize();
// return "index";//配合@Controller使用返回view
}

// @RequestMapping(value={"/sayy","sayy2"},method = RequestMethod.GET)
@GetMapping(value="/sayy")
public String sayy(@RequestParam(value="id",required = false,defaultValue = "0") Integer myId){
return "id:"+myId;
}

@GetMapping(value="/girls/{id}")
public Girl getGirlById(@PathVariable("id") Integer id){
return girlRepository.findOne(id);
}

  1.  

}

@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {

private String cupSize;

private Integer age;

public String getCupSize() {
return cupSize;
}

public void setCupSize(String cupSize) {
this.cupSize = cupSize;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}

配置文件如下

  1. girl:
    cupSize: B
    age: 18
    mytest:ccctest
    content:"zhangsansan ${name}+${age}"
  1. spring:
    datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/boot
    username: root
    password: root5770
    jpa:
    hibernate:
    ddl-auto: update
    show-sql: true

3:   springboot 启动方式

1:右键启动MyspringbootApplication

2:命令行启动mvn spring-boot:run

3:先mvn install 然后 java -jar xxx.jar --spring.profiles.active=prod

4:server.context-path=/girl 设置通用路径

5:设置不同的配置环境文件

spring:
   profiles:
     active: dev

6:jpa相关代码

@Entity
public class Girl {

@Id
@GeneratedValue
private Integer id;

private String cupSize;

private Integer age;
}

public interface GirlRepository extends JpaRepository<Girl,Integer>{

public List<Girl> findByAge(Integer age);
}

7: spring aop 是一种编程范式与语言无关

需要引入

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

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

}

也可以用一下方式代替不用设置pointcut

@After("execution(public * com.imooc.controller.GirlController.*(..))")
public void doAfter() {
logger.info("222222222222");
}

8:@Valid注解用于校验,所属包为:javax.validation.Valid。

① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于Girl类中的属性):

@Min(value = 18,message = "未成年禁止入内")
private Integer age;
② 其次在controller层的方法的要校验的参数上添加@Valid注解,并且需要传入BindingResult对象,用于获取校验失败情况下的反馈信息,如下代码:
@PostMapping("/girls")
public Girl addGirl(@Valid Girl girl, BindingResult bindingResult) {
if(bindingResult.hasErrors()){
System.out.println(bindingResult.getFieldError().getDefaultMessage());
return null;
}
return girlResposity.save(girl);
}
bindingResult.getFieldError.getDefaultMessage()用于获取相应字段上添加的message中的内容,如:@Min注解中message属性的内容

9:全局异常捕获

@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, "未知错误");
}
}
}

10:异常类

  1. public class GirlException extends RuntimeException{
  2.  
  3. private Integer code;
  4.  
  5. public GirlException(ResultEnum resultEnum) {
    super(resultEnum.getMsg());
    this.code = resultEnum.getCode();
    }
  6.  
  7. public Integer getCode() {
    return code;
    }
  8.  
  9. public void setCode(Integer code) {
    this.code = code;
    }
    }
  10.  
  11. 调用方法

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

}

  1.  
  2. 11:枚举类
  1. public enum ResultEnum {
    UNKONW_ERROR(-1, "未知错误"),
    SUCCESS(0, "成功"),
    PRIMARY_SCHOOL(100, "我猜你可能还在上小学"),
    MIDDLE_SCHOOL(101, "你可能在上初中"),
  2.  
  3. ;
  4.  
  5. private Integer code;
  6.  
  7. private String msg;
  8.  
  9. ResultEnum(Integer code, String msg) {
    this.code = code;
    this.msg = msg;
    }
  10.  
  11. public Integer getCode() {
    return code;
    }
  12.  
  13. public String getMsg() {
    return msg;
    }
    }
    12:http请求返回的最外层对象

public class Result<T> {

/** 错误码. */
private Integer code;

/** 提示信息. */
private String msg;

/** 具体的内容. */
private T data;

}

13:封装返回对象方法

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 success() {
return success(null);
}

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

14:单元测试

  1. @RunWith(SpringRunner.class)
    @SpringBootTest
    public class GirlServiceTest {
  2.  
  3. @Autowired
    private GirlService girlService;
  4.  
  5. @Test
    public void findOneTest() {
    Girl girl = girlService.findOne(73);
    Assert.assertEquals(new Integer(13), girl.getAge());
    }
    }
  6.  
  7. 15:测试controller
  1. @RunWith(SpringRunner.class)
    @SpringBootTest
    @AutoConfigureMockMvc
    public class GirlControllerTest {
  2.  
  3. @Autowired
    private MockMvc mvc;
  4.  
  5. @Test
    public void girlList() throws Exception {
    mvc.perform(MockMvcRequestBuilders.get("/girls"))
    .andExpect(MockMvcResultMatchers.status().isOk())
    .andExpect(MockMvcResultMatchers.content().string("abc"));
    }
  6.  
  7. }
    16:事务控制
  1. @Transactional
    @Override
    public void saveTwo() {
    Girl girlA = new Girl();
    girlA.setAge(18);
    girlA.setCupSize("A");
    girlRepository.save(girlA);
  2.  
  3. Girl girlB = new Girl();
    girlB.setAge(19);
    girlB.setCupSize("B");
    girlRepository.save(girlB);
  4.  
  5. }

2小时学会spring boot 以及spring boot进阶之web进阶(已完成)的更多相关文章

  1. spring boot / cloud (十五) 分布式调度中心进阶

    spring boot / cloud (十五) 分布式调度中心进阶 在<spring boot / cloud (十) 使用quartz搭建调度中心>这篇文章中介绍了如何在spring ...

  2. spring boot / cloud (十二) 异常统一处理进阶

    spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...

  3. 一:Spring Boot、Spring Cloud

    上次写了一篇文章叫Spring Cloud在国内中小型公司能用起来吗?介绍了Spring Cloud是否能在中小公司使用起来,这篇文章是它的姊妹篇.其实我们在这条路上已经走了一年多,从16年初到现在. ...

  4. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  5. 使用Spring Session实现Spring Boot水平扩展

    小编说:本文使用Spring Session实现了Spring Boot水平扩展,每个Spring Boot应用与其他水平扩展的Spring Boot一样,都能处理用户请求.如果宕机,Nginx会将请 ...

  6. 一起来学spring Cloud | 第一章:spring Cloud 与Spring Boot

    目前大家都在说微服务,其实微服务不是一个名字,是一个架构的概念,大家现在使用的基于RPC框架(dubbo.thrift等)架构其实也能算作一种微服务架构. 目前越来越多的公司开始使用微服务架构,所以在 ...

  7. Spring,Spring MVC及Spring Boot区别

    什么是Spring?它解决了什么问题? 我们说到Spring,一般指代的是Spring Framework,它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代 ...

  8. 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

    由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...

  9. Spring Cloud Alibaba与Spring Boot、Spring Cloud之间不得不说的版本关系

    这篇博文是临时增加出来的内容,主要是由于最近连载<Spring Cloud Alibaba基础教程>系列的时候,碰到读者咨询的大量问题中存在一个比较普遍的问题:版本的选择.其实这类问题,在 ...

随机推荐

  1. Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色

    android:orientation="vertical"(AndroidStudio不提示,这个要记住了) 昨天好不容易把ActionBar从溢出菜单overflow中弄出来了 ...

  2. hibernate注解JPA

    1.JPA与hibernate 什么是JPA ? java persistence api :java持久化api,同一的ORM规范,是由sun公司指定的规范接口,hibernate实现了JPA规范. ...

  3. Jquery-ajax()方法提交json数据

    1.ajax()提交json数据代码 var strJson = getStrPayJson(); $.ajax({ type: "POST", url: "/userc ...

  4. Spring MVC+Fastjson之时间类型序列化

    时间类型序列化: 注意红色代码,必须引入fastjson的JSONField类,而非其它. import com.alibaba.fastjson.annotation.JSONField; @Ent ...

  5. jquery获取不了ajax动态添加的内容的解决办法

    在HTML页面的一个button <div class="ajaxClick"> <button>内容</button> </div> ...

  6. The only person standing in your way is you.

    The only person standing in your way is you.唯一阻碍你的人是你自己.

  7. 【起航计划ObjC 001】印第安老斑鸠ObjC的幻想 ---- Ubuntu下安装并使用Obj-C

    如何在最新版本的 Ubuntu下(14.10)来安装.编译Objective-C? Ubuntu已经有了对Objective-C的编译器(gobjc)的安装,因此安装gobjc的步骤可省,如果你用的U ...

  8. 任务五:零基础HTML及CSS编码练习加强版

    任务目的 针对设计稿样式进行合理的HTML架构,包括以下但不限于: 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 掌握基本的 ...

  9. spark学习地址

    http://blog.sina.com.cn/s/blog_64d9a6ef0101ghvs.html http://blog.sina.com.cn/s/blog_49cd89710102v3b1 ...

  10. python获取硬件信息模块

    https://github.com/redhat-cip/hardware https://github.com/rdobson/python-hwinfo https://github.com/r ...