springboot汇总三(核心技术)

1.yaml配置文件
在application.properties同级目录下新建一个application.yaml的文件。两个文件可以同时生效。(properties优先)
规则如下:
key: value的形式,冒号后面有个空格。

区分大小写(与数据库不同)

使用缩进表示层级关系。(缩进使用空格,空格的多少无所谓,只要左对齐,就可以表示层级关系,注意table键在有的IDE中不一定生效,idea可以生效)

#表示注释

字符串不需要加引号,加单引号和不加作用一样。加双引号会把\n作为换行输出。

对象,set,map可以使用层级关系表示法,也可以使用行内表示法(和json类似,用大括号包裹,注意此时冒号后面可不加空格)。

list,array等也可以使用行内写法(使用中括号包裹 )或者层级表示法(与对象类似,不过把key用—替换,并去掉冒号和空格)
附:yaml自定义配置的提示功能。
引入以下依赖,但实际上,这个依赖只对于开发有用,对于程序来讲,只会加重程序负担。因此,在打包的时候,需要将这个依赖排除掉。因此引入依赖的同时,还需要引入以下插件。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>


<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.web开发
1.静态资源访问
springboot官方文档,指定了默认的静态资源请求文件加如下(我们如果在resources路径下,创建以下文件加,都可以加载到这些静态资源。)
在这里插入图片描述

静态资源访问原理:
首先静态资源访问路径默认为/**,这个意思就是表示类路径下拦截所有的请求。当请求进来时,先去找controller,看controller能不能处理,不能处理的交个静态资源处理器,能处理就不交给静态资源进行处理,然后静态资源拦截所有请求,就可以访问到这些路径下的请求。

静态资源访问前缀设置:
默认情况下无前缀。但有时候我们需要改变访问路径前缀(在设置登陆拦截请求的时候,需要拦截所有的请求。这时候会拦截掉静态资源的请求,但如果加上固定的前缀,我们就可以对特定前缀的资源进行放行。)。在application.properties中加上配置:spring.mvc.static-path-pattern=/resources/**。访问静态资源就必须带上resources前缀。

修改默认静态资源路径:
添加配置spring.resources.static-location=[classpath:/111/]。
这样就只能访问111路径下的静态资源。这是json数组写法。可以设置多个路径

3.欢迎页
注意,如果配置了静态资源访问前缀,那么会使得欢迎页和favicon.ico失效。
网站图标,只需要在静态资源路径下,添加图标文件,文件名为favicon.ico即可。(注意禁用浏览器缓存)

4.restful风格请求
对于请求方式的url的规定。在原来的环境下,我们只能使用post和get两种方式的提交,但是这对url请求方式的设计很不方便,比如get表示查询,post表示提交,无法表示put和delete。而使用restful技术,就可以进行delete和put(put表示更新)方式提交。
操作过程如下:
1.后台requestMapping带一个method=RequestMethod.PUT的属性。
2.查看WebMvcAutoConfiguration的对springmvc的自动配置发现,springboot已经做好了restful风格的自动配置。我们只需要在配置文件中开启即可
spring.mvc.hiddenmethod.filter.enabled=true。
3.表单请求的时候,提交方式一律为post,并添加一个隐藏的input标签。(value表示真正的提交方式)

<form action="/user" method="post">
<input name="_method" type="hidden" value="put">
</form>

restful原理(仅对于表单的提交是这种流程):
1.表单提交带上_method标签
2.请求发完之后,被springboot 的springmvc相关的默认配置拦截。
3.拦截之后,查看请求是否正常,并且是否为post方式。
4.然后获取到_method的value值(只能兼容put,delete,patch,大小写均可)
5.原生的request(httpServletRequest)包装了requestWrapper,这个requestWrapper继承来自于HttpServletRequest。这个requestWrapper可以接收一个_method的参数。重写了HttpServletRequest的getMethod方法。这样对原生request就赋予了requestWrapper的功能,然后通过过滤器放行这个requestWrapper,因此后端controller调用的getMethod就是调用这个requestWrapper重写后的方法。
(简单理解一下,就是通过requestWrapper,重写getMethod方法,使得原来的提交的post方法可以变成对应的_method的值,然后controller调用,就可以区分delete,put,patch)

注意:对于非表单提交的请求,则不会经过上面哪个过滤器进行处理一样,因为提交put请求的时候,这个method已经变成了put请求,直接放行。(因此对于非表单提交restful也能生效)(这是为什么如果不提交_method,同样是直接放行,因此post方式还是post方式,没有改变为对应的_method方式)

如何修改默认的_method:
查看源码进行修改。源码如下:

@Bean
    @ConditionalOnMissingBean({HiddenHttpMethodFilter.class})
    @ConditionalOnProperty(
        prefix = "spring.mvc.hiddenmethod.filter",
        name = {"enabled"},
        matchIfMissing = false
    )
    public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() {
        return new OrderedHiddenHttpMethodFilter();
    }

可以看见有一个conditionalOnMissingBean。因此我们手动编写一个配置类,并且添加这个HiddenHttpMethodFilter的组件。
方法如下:

//配置类无依赖,使用proxyBeanMethods=false更快
@Configuration(proxyBeanMethods = false)
public class MyConfig {
	//返回一个组件为HiddenHttpMethodFilter
    @Bean
    public HiddenHttpMethodFilter hiddenHttpMethodFilter(){
        HiddenHttpMethodFilter methodFilter = new HiddenHttpMethodFilter();
        //观察到HiddenHttpMethodFilter的源码中,有个set方法可以改变_method。因此重新设置即可。
        methodFilter.setMethodParam("_x");
        return methodFilter;
    }
}

5.请求注解
对于requestMapping:表示给页面返回一个string对象。返回的是一串字符串。
对于带有put,post方法的请求,可以简写为PutMapping,PostMapping

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值