目录
一、Maven学习
1、Maven中的dependencyManagement和dependencies区别
2、maven作用
3、maven插件-assembly
二、@RequestBody注解的作用
一、Maven学习
1、Maven中的dependencyManagement和dependencies区别
Maven中使用dependencyManagement元素来提供一种管理依赖版本号的方式。
通常会在一个组织或者项目的最顶层的父POM中看到dependencyManagement元素。
使用pom.xml中的dependencyManagement元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用这个dependencyManagement元素中指定的版本号。
好处是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改;另外如果某个子项目需要另外的一个版本,只需要声明version就可。
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;
如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
Idea中Maven仓库选择
setting文件中路径可修改
<localRepository>D:/repo</localRepository>Maven官网下载.zip版软件 Maven官网下载
下载完直接解压
1.配置环境变量M2_HOME
2. 在path变量的最后面加上 ;%M2_HOME%\bin注意:%号前面的;号不能扔掉
cmd 命令 mvn -version
出现maven版本即配置成功。
2、maven作用
1 . 帮你下载jar包
maven项目会有一个 pom.xml文件, 在这个文件里面,只要你添加相应配置,
他就会自动帮你下载相应jar包,不用你铺天盖地的到处搜索你需要的jar包了
2 . 寻找依赖,帮你下载依赖
3 . 热部署,热编译
意思就是,在你web项目已经运行的时候,修改代码的能直接被web服务器所接受,就不需要你重启服务器了,或者重新部署代码了,而且你可以直接通过maven 打包war或者jar项目。
3、maven插件-assembly
Maven有三种打包方式,分别为:
- assembly:自定义的打包结构,也可以定制依赖项等;把项目打包成可执行的jar
- jar:默认的打包方式,用来打普通的
project JAR包; - shade:用来打可执行
jar包,也就是所谓的fat JAR包。
maven-assembly-plugin是Maven中一个强大的插件,用于将项目及其依赖项、资源文件等打包成自定义的分发包(如ZIP、TAR、JAR等格式)
什么是Assembly?
“assembly”是把一组文件、目录、依赖元素组装成一个归档文件. 比如, 假设一个 Maven project定义了一个JAR artifact,它包含控制台应用程序和Swing应用程序 。这样一个工程可以定义两套包含描述符,一套给给控制台应用,另一套给Swing应用程序,它们包含各自的脚本、目录和依赖。
Assembly Plugin的描述符可以定义任何一个文件或者目录归档方式。举个例子,如果的你的Maven 2工程包含”src/main/bin”这个目录,你可以指示Assembly插件复制“src/main/bin”目录下所有的文件到bin目录里(归档文件里的目录),并且可以修改它们的权限属性(UNIX mode)。
在pom.xml 文件里面的配置说明
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <executions> <!--执行器 mvn assembly:assembly--> <execution> <id>make-zip</id><!--名字任意 --> <phase>package</phase><!-- 绑定到package生命周期阶段上 --> <goals> <goal>single</goal><!-- 只运行一次 --> </goals> <configuration> <descriptors> <!--描述文件路径--> <descriptor>src/main/resources/zip.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin>- shade打包官方教程:https://maven.apache.org/plugins/maven-shade-plugin/examples/attached-artifact.html;
- jar打包官方教程: https://maven.apache.org/shared/maven-archiver/examples/classpath.html;
- assembly打包官方教程:https://maven.apache.org/plugins/maven-assembly-plugin/examples/single/filtering-some-distribution-files.html
Maven的三种打包方式(jar、shade、assembly)
4、<resources>标签
在 Maven 项目中,<resources> 标签用于配置哪些非 Java 源文件(如配置文件、静态资源等)需要被打包到最终的构建输出(通常是 target/classes)中。默认情况下,Maven 会自动处理 src/main/resources 目录下的内容,但若需自定义资源路径、启用变量替换(filtering)或包含其他目录(如 src/main/java 中的 XML 文件),则需显式配置 <resources>
核心作用
- 指定资源目录:告诉 Maven 哪些目录下的文件应被包含在打包结果中。
- 启用变量替换(filtering):将资源文件中的占位符(如
${property})替换为pom.xml中定义的属性值。 - 精细控制包含/排除文件:通过
<includes>和<excludes>精确筛选需要处理的文件。
<build> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>二、@RequestBody注解的作用
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),所以只能发送POST请求。
GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。
jQuery中,$.ajax()默认发送的参数类型及编码为:application/x-www-form-urlcoded,而@RequestBody处理的参数类型及编码为:aplication/json或者是application/xml,通过contentType属性来指定
在传递之前,对JSON对象要使用JSON.stringify(),JSON.stringify() 方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串
后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值
符合(或可转换为)实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。
注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、数组、集合、对象等等(@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。
天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。