SpringBoot(二、配置文件注入,异常,测试,打包)

配置文件自动注入

配置文件

如下,在application.yml中添加如下节点(也可以添加其他配置文件)

zq:
  name: zqqq
  age: 30

在controller中使用

@RequestMapping("json")
@RestController
@PropertySource(value = "classpath:application.yml")
public class JacksonController {
    @Value("${zq.name}")
    private String name;
   
    @GetMapping("/v2/json")
    public User getInfo() {
        User user=new User();
        user.setName(name);
        user.setSex("hahah");
        user.setTime(new Date());
        return user;
    }
}

配置文件注入bean中

  • 添加@Component
  • 添加注解@PropertySource(value = "classpath:application.yml")
  • @ConfigurationProperties(prefix = "zq") # 代表前缀

对应实体类

@Component
@PropertySource("classpath:application.yml")
@ConfigurationProperties(prefix = "zq")
public class ServerConstant {
    //实验得出结论 此时@Value()不是必须的
    @Value("${name}")
    String name;
    @Value("${age}")
    int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

因为前缀zq既可以唯一确定属性值取配置文件中,但是如果不加(prefix = "zq")即省略前缀,则无法确定,此时需要添加 @Value();

如果配置文件中没有前缀,只要属性名和配置文件中属性名一致,也可以省略@Value()

控制器中使用

@RequestMapping("json")
@RestController
public class JacksonController {
    @Autowired
    private ServerConstant serverConstant;

    @GetMapping("/v2/bean")
    public ServerConstant getHaha() {
        return serverConstant;
    }
}

单元测试

基本测试

  1. 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  1. 使用
@RunWith(SpringRunner.class)  //底层juniSpringJUnit4ClassRunner
@SpringBootTest(classes={XdclassApplication.class})//启动整个springboot工程
public class SpringBootTests { }

MockMvc讲解

1、增加类注解

@AutoConfigureMockMvc
@SpringBootTest(classes={XdclassApplication.class})

2、相关API

perform:执行一个RequestBuilder请求

andExpect:添加ResultMatcher->MockMvcResultMatchers验证规则

andReturn:最后返回相应的MvcResult->Response

个性化启动banner设置和debug日志

1、启动获取更多信息 java -jar xxx.jar --debug

2、修改启动的banner信息

1)在类路径下增加一个banner.txt,里面是启动要输出的信息
2)在applicatoin.properties增加banner文件的路径地址 spring.banner.location=banner.txt
3)官网地址 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-banners

异常相关

配置全局异常

@ControllerAdvice
public class CustomExtHandle {
    /**
     * 全局异常
     * @param e
     * @param request
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    Object handleException(Exception e, HttpServletRequest request) {
        Map<String,Object> map=new HashMap<>();
        map.put("code",100);
        map.put("msg",e.getMessage());
        map.put("url",request.getRequestURL());
        return map;
    }
}

全局捕获异常,但是此时针对的是json返回的异常,例如路径找不到,返回的是页面数据时候,就不行了,可以再定义一个全局的返回页面的异常。利用ModelAndView

自定义异常

public class MyException extends RuntimeException {

    private String code;
    private String msg;

    public MyException(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}
@ControllerAdvice
public class CustomExtHandle {
    /**
     * 全局异常
     * @param e
     * @param request
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    Object handleException(Exception e, HttpServletRequest request) {
        Map<String,Object> map=new HashMap<>();
        map.put("code",100);
        map.put("msg",e.getMessage());
        map.put("url",request.getRequestURL());
        return map;
    }


    /**
     * 自定义异常: MyException集成的是RuntimeException
     * @param e
     * @param request
     * @return
     */
    @ExceptionHandler(value = MyException.class)
    @ResponseBody
    Object handleMyException(Exception e, HttpServletRequest request) {
        //addObject添加的数据,必须在模板引擎中获取,当前设置一个hmtl,暂时没有使用模板引擎
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("error.html");
        modelAndView.addObject("msg", e.getMessage());
        return modelAndView;
        //同理,也可以返回json数据,同上一个方法
    }
}

如果是返回json数据 则用RestControllerAdvice,就可以不加@ResponseBody

打War包

  • 添加依赖
<build>
    <!-- 构建项目名称,请求的基本路径名称 -->
    <finalName>zqclass_springboot</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

此依赖不论jar(生成mainfast文件)还是war必须都有

  • 修改启动类
@SpringBootApplication
public class HelloApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(HelloApplication.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(HelloApplication.class, args);
    }
}
图一.png

访问测试: http://127.0.0.1:8080/zq_springboot/json/v2/bean

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 三十天,找到一个男朋友,听起来就特别有意思,还真的有人去做了,而且做到了。做自己喜欢做的事,做最真实的自己,那个女...
    卓欣阅读 145评论 0 0
  • 1、只需要简简单单的导入第三方库:Masonry 2、在工程中创建预编译文件pch(创建过程可参考渣渣的“Xcod...
    毛茸茸的我总念成橡皮虾阅读 284评论 0 4
  • 曾经感情无比美好,令无数人羡慕的一对,因为一点小事而分手,成为朋友。人们的感情是无比的脆弱啊,一年半的长相厮守经不...
    992bd0e8393f阅读 320评论 0 0
  • 这题就是anagram那道easy题。先要clarification, 是否区分大小写。长度不同就不用判断了肯定f...
    DrunkPian0阅读 206评论 0 0
  • 亲爱的父亲: 不知相隔在阴阳的您,能否看到女儿字字泣血的信?一次次用手指在手机屏幕上写,想为您写点什么,却...
    郑晓丹_27cf阅读 405评论 2 0