Eclipse下利用Maven创建SpringBoot的Restful风格程序
参考文章:https://spring.io/guides/gs/rest-service/
中文翻译:https://blog.dubby.cn/detail.html?id=9040
1.目标是什么
构建一个web应用,我们可以请求:
http://localhost:8080/greeting
返回一个JSON
:
{"id":1,"content":"Hello, World!"}
还可以发起一个带参数的请求:
http://localhost:8080/greeting?name=User
返回一个JSON
:
{"id":1,"content":"Hello, User!"}
2.开始创建
2.1.Maven依赖
新建一个Maven项目
pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.niiam</groupId>
<artifactId>SpringBootRestfulTest</artifactId> <version>0.0.1-SNAPSHOT</version>
<name>SpringBootRestfulTest Maven Webapp</name>
<url>http://maven.apache.org</url> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <properties>
<java.version>9.0.1</java.version>
</properties> <build>
<finalName>SpringBootRestfulTest</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> <repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
其中,spring-boot-maven-plugin
给我们提供了这么几个功能:
- 他会把classpath下的jar统一打包成一个可直接运行的”über-jar”,方便我们运行。
- 他会自动搜索
public static void main()
作为程序执行的入口。 - 他内置一个依赖版本决定者。也就是他会指定依赖的版本。当然你也可以指定版本,如果你不指定,默认由他来决定版本。
2.2 实体类
根据
{
"id": 1,
"content": "Hello, World!"
}
来写出一个表达这个json的bean src/main/java/hello/Greeting.java
package hello; public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
Spring会使用Jackson JSON自动把Greeting
的实例序列化成JSON
。
2.3 controller
在Spring构建的restful应用中,HTTP请求是由controller接收并处理的。想要创建一个controller可以使用@RestController
修饰一个类,那么这个类就变成了一个controller。一个controller里的每个方法都可以接收一个特定的URI,需要使用@RequestMapping
来修饰每个方法,来制定URI的路径,参数,方法等。
src/main/java/hello/GreetingController.java
package hello; import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; @RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
这个controller很简洁明了,但是在背后隐藏了很多事先细节,我们一点点来分解。
@RequestMapping
这个注解确保/greeting
这个HTTP请求会被路由到greeting()
这个方法上来处理。
上面的例子没有指明
GET
,PUST
或者是PUT
等HTTP方法,因为@RequestMapping
默认是映射所有的方法。如果你只希望某个方法被映射到这个方法,可以使用@RequestMapping(method=GET)
来缩小映射范围。
@RequestParam
把请求参数中的name
的值绑定到greeting()
的参数name
上。这个参数被标记为可选的,也就是可传可不传的,(默认情况下,required=true
是必须要传的),在这里,如果没有传name
,就会使用defaultValue
的值。
greeting()
方法里创建了一个Greeting
对象,然后返回,用一个自增的int作为id
,用name
的值拼接成content
。
传统的MVC的controller和RESTful的controller的最大的区别就是返回的HTTP的response。传统的controller返回的是一个由后端渲染的HTML
,而RESTful返回的是一个对象,然后被序列化成JSON
字符串。
@RestController
是Spring4新加的一个注解,用它修饰的controller返回的是一个对象(也就是JSON
),而不是一个视图(也就是HTML
)。这个注解等同于同时使用@Controller
和@ResponseBody
。
上面提到Spring会自动把对象转化成JSON
,我们还不需要手动来转换,那么是谁帮我们做的呢?真相是,只要Jackson 2在classpath下,Spring就会使用MappingJackson2HttpMessageConverter
来自动转换。
2.4 可执行Jar
虽然也可以打包成传统的war包然后交给servlet容器来执行,但是更多的时候是打包成一个可以直接执行的Jar。
src/main/java/hello/Application.java
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
注解等同于同时使用一下注解:
@Configuration
修饰的类会被作为定义context上下文的bean。@EnableAutoConfiguration
允许Spring从配置文件,其他bean,等各种方式来加载bean。- 一般来说,对于Spirng MVC项目,你需要使用
@EnableWebMvc
,不过对于Spring Boot来说,只要你的classpath里包含spring-webmvc,他就会自动帮你加上这个,比如,设置DispatcherServlet
。 @ComponentScan
告诉Spirng去扫描hello
包下的其他组件,包含controller,service等。
main()
就是这个应用的入口。发现了吗,整个应用没有一个XML文件,全部都是Java代码,没有任何配置,这就是Spring Boot想带给你的礼物。
右键点击Application.java,选择run as->java application,即可启动服务。
2.5 生成可执行Jar
右键点击项目->run as->Maven Install生成jar包,可能需要在项目设置里将JRE换成JDK
在command line输入:
java -jar SpringBootRestfulTest.jar
启动
在浏览器中输入:
http://localhost:8080/greeting?name=wangle
http://localhost:8080/greeting
需注意的是,此处启动的jar是包含了Tomcat服务器的
如需终止,可参考:如何优雅地停止运行中的内嵌Tomcat的Spring Boot应用 http://jaskey.github.io/blog/2016/04/05/shutdown-spring-boot-application-gracefully/
Eclipse下利用Maven创建SpringBoot的Restful风格程序的更多相关文章
- Eclipse下使用Maven创建项目出现的archetype错误,记,转
记自:http://blog.csdn.net/ZhuboSun/article/details/50099635 [1]出现的错误提示: Unable to create project from ...
- 照葫芦画瓢系列之Java --- eclipse下使用maven创建Struts 2项目
一.创建Maven项目 http://www.cnblogs.com/zhanqun/p/8425571.html 二.添加struts2核心依赖包以及其他依赖项 打开pom.xm配置界面 点击Add ...
- Eclipse下的Maven
本文转载自:http://www.cnblogs.com/zlslch/p/5882567.html 当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说 ...
- Eclipse下新建Maven项目、自动打依赖jar包
当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说,书房只有一个,但外面的书店有很多,类似第,对于Maven来说,每个用户只有一个本地仓库,但可以配置访 ...
- eclipse下新建maven项目
eclipse下新建maven项目 1.1下载maven安装包 进入Maven官网的下载页面:http://maven.apache.org/download.cgi,如下图所示:\ 选择当前最新版本 ...
- [Gradle] 在 Eclipse 下利用 gradle 构建系统
转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 构建系统时候常常要用到 Ant, Maven 等工具,对于初学者 ...
- (转)Maven学习总结(七)——eclipse中使用Maven创建Web项目
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(七)——eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -&g ...
- 在Eclipse中使用Maven创建Web工程
在Eclipse中使用Maven创建Web工程 1.创建maven Project工程,使用maven-archetype-webapp 2.在pom.xml文件中,设置打包类型为war <pa ...
- Maven学习总结(7)——eclipse中使用Maven创建Web项目
Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如 ...
随机推荐
- Using InfluxDB in Grafana,influxDB在grafana中使用
grafana带有功能丰富的数据源插件influxDB.支持丰富的查询编辑器.注释和templating(模版)查询. 增加数据源(Adding the data source) 点击顶部Grafan ...
- 修改本机域名localhost为任意你想要的名称
web项目研发中,测试的时候项目路径与发布以后的路径不一致,项目组之间的路径不一致,这样会加大工作量,这个时候我们可以统一一下开发的路径,这样可以省很多事,话不多说,看下面教程: 在系统盘中的如下路径 ...
- web测试策略
一.输入框 二.搜索功能 三.添加功能 四.修改功能 五.删除功能 六.注册.登陆模块 七.上传图片测试 八:文件导出 九.文件下载页面 十.查询结果列表 十一.cookie 一.输入框 1 字 ...
- JS单例
s = (function S(){ var bean; function get(){ if(bean){ return bean }else{ bean = T(); return bean; } ...
- LeetCode::Sort List 具体分析
Sort a linked list in O(n log n) time using constant space complexity. 这道题目非常简短的一句话.给链表排序,看到nlogn.我们 ...
- 007-sql整体概述
一.概述 sql基础:数据库.数据表.行.列.关系 查询: Select 字段1,字段2,* from 表 where 条件 去除重复:Distinct 必须放在所有列前面 区间语句:BETWEEN ...
- ACM解题之(ZOJ 1094) Matrix Chain Multiplication
题目来源: 点击打开链接 题目翻译: 矩阵乘法问题是动态规划的典型例子. 假设你必须评估一个表达式,如A * B * C * D * E,其中A,B,C,D和E是矩阵.由于矩阵乘法是关联的,乘法运算的 ...
- python读写Excel文件--使用xlrd模块读取,xlwt模块写入
一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...
- Incomplete response received from application
RAILS_ENV=production rake secret 将输出的一大串字码粘贴到rails工程中/config/secrets.yml去,替换掉该文件中的<%= ENV["S ...
- 类百度DOC编辑区域
.mainarea{ position:absolute; top:151px; width:100%; bottom:0px; } .edit_wrap{ background:#fcfcfc; p ...