假设你已经设置了项目和构建系统,你能够建立Web服务。java
经过考虑服务交互来开始这个过程。git
该服务将处理GET请求/greeting,可选地使用name查询字符串中的参数。该GET请求应该返回200 OK在表示问候的身体与JSON响应。它应该看起来像这样:github
{ "id": 1, "content": "Hello, World!" }
该id字段是问候语的惟一标识符,是问候语content的文本表示。web
要为问候语表示建模,请建立资源表示形式类。提供一个普通的旧java对象,其中包含id和content数据的字段,构造函数和访问器:spring
@Data @AllArgsConstructor public class Greeting { private final long id; private final String content; }
正如你在下面的步骤中看到的,Spring使用Jackson JSON库自动将类型实例Greeting封送到JSON中。
在Spring构建RESTful Web服务的方法中,HTTP请求由控制器处理。这些组件很容易经过@RestController注释来识别,GreetingController下面经过返回类的新实例来处理GET请求:服务器
@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)); } }
这个控制器简洁而简单,但引擎下有不少东西,让咱们一步一步地分解它。restful
所述@RequestMapping注释能够确保HTTP请求/greeting被映射到greeting()方法。mvc
上面的示例未指定GETvs. PUT,POST等等,由于@RequestMapping默认状况下映射全部HTTP操做。使用@RequestMapping(method=GET)缩小这种映射。
@RequestParam将查询字符串参数的值绑定name到方法的name参数中greeting()。若是name请求中不存在该参数,defaultValue则使用“World”。app
方法体的实现基于来自的下一个值建立并返回Greeting具备id和content属性的新对象,并使用问候counter格式化给定name的格式template。函数
传统MVC控制器和上面的RESTful Web服务控制器之间的关键区别在于建立HTTP响应主体的方式。这个RESTful Web服务控制器只是填充并返回一个对象,而不是依靠视图技术来执行将问候数据的服务器端呈现为HTML Greeting。对象数据将做为JSON直接写入HTTP响应。
此代码使用Spring 4的新@RestController注释,它将类标记为控制器,其中每一个方法都返回一个域对象而不是视图。它是速记@Controller和@ResponseBody拼凑在一块儿的。
该Greeting对象必须转换为JSON。因为Spring的HTTP消息转换器支持,您无需手动执行此转换。由于Jackson 2在类路径上,因此MappingJackson2HttpMessageConverter会自动选择Spring 来将Greeting实例转换为JSON。
虽然能够将此服务打包为传统的WAR文件以部署到外部应用程序服务器,但下面演示的更简单的方法建立了一个独立的应用程序。您将全部内容打包在一个可执行的JAR文件中,由一个好的旧Java main()方法驱动。在此过程当中,您使用Spring的支持将Tomcat servlet容器嵌入为HTTP运行时,而不是部署到外部实例。
@SpringBootApplication public class RestfulWebApplication { public static void main(String[] args) { SpringApplication.run(RestfulWebApplication.class, args); } }
@SpringBootApplication 是一个便利注释,添加了如下全部内容:
该main()方法使用Spring Boot的SpringApplication.run()方法来启动应用程序。您是否注意到没有一行XML?也没有web.xml文件。此Web应用程序是100%纯Java,您无需处理配置任何管道或基础结构。
您可使用Gradle或Maven从命令行运行该应用程序。或者,您能够构建一个包含全部必需依赖项,类和资源的可执行JAR文件,并运行该文件。这使得在整个开发生命周期中,跨不一样环境等将服务做为应用程序发布,版本和部署变得容易。
若是您使用的是Gradle,则可使用运行该应用程序./gradlew bootRun。或者您可使用构建JAR文件./gradlew build。而后你能够运行JAR文件:
java -jar build / libs / gs-rest-service-0.1.0.jar
若是您使用的是Maven,则可使用该应用程序运行该应用程序./mvnw spring-boot:run。或者您可使用构建JAR文件./mvnw clean package。而后你能够运行JAR文件:
java -jar target / gs-rest-service-0.1.0.jar
如今该服务已启动,请访问http:// localhost:8080 / greeting,其中显示:
{"id":1,"content":"Hello, World!"}
name使用http:// localhost:8080 / greeting?name = User提供查询字符串参数。注意content属性的值如何从“Hello,World!”改变。“你好,用户!”:
{"id":2,"content":"Hello, User!"}
此更改代表该@RequestParam安排GreetingController正在按预期工做。该name参数已被赋予默认值“World”,但始终能够经过查询字符串显式覆盖。
另请注意id属性如何从更改1为2。这证实您正在GreetingController跨多个请求针对同一实例工做,而且其counter字段在每次调用时按预期递增。
恭喜!您刚刚使用Spring开发了RESTful Web服务。
GitHub:Restful-Web