Spring Boot REST示例
Spring Boot是Spring Framework的一个很棒的模块。
一旦习惯了,那么使用Spring就是一件轻而易举的事,因为它可以处理所有特定于Spring容器的配置,并使我们可以将更多精力放在应用程序上。
REST Web服务近来非常流行,因此在本教程中,我们将看到使用Spring Boot创建RESTful Web服务的难易程度。
Spring Boot REST依赖关系
由于Web服务在服务器上运行,因此除了Spring Boot之外,我们需要将Spring MVC添加到我们的项目中。
我正在使用Eclipse创建基本的Spring Boot项目,但是您也可以使用Spring Initializr。
当我们使用Eclipse创建Spring项目时,它实际上使用Spring Initializr并对其进行配置。
让我们开始吧。
Spring Boot REST项目
如下图所示,创建新的Spring Starter Project。
Eclipse应该对此具有Spring支持,所有最新的Eclipse版本都具有内置的Spring支持。在下一个弹出屏幕中,提供项目基本详细信息。
我正在使用Maven,您也可以使用Gradle。下一个屏幕要求添加除Spring Boot以外的依赖项。
添加" Web"依赖项,然后单击"下一步"。我们可以在前面的屏幕中单击"完成",但是单击"下一步"将为我们提供Spring Initializr URL,我们可以使用它通过命令行轻松地创建此项目。
这是完整的URL,您可以在浏览器中转到该URL,然后下载到目前为止我们创建的骨架Maven项目。
- 下图显示了自动生成的项目的内容,其中最重要的是
SpringBootRestApplication
类,该类配置为Spring Boot应用程序并包含java main方法。
当我们运行这个类时,它会自动以Spring Boot Web项目的形式运行我们的项目,如果您要查看控制台日志,它应该显示Tomcat在端口8080(http)上启动,上下文路径为
。
现在我们的基础Spring Boot REST应用程序已经准备就绪,是时候添加一些端点和业务逻辑了。
我们将使用一个Java bean类来发送REST Web服务响应。
这是它的代码。
https://start.spring.io/starter.zip?name=Spring-Boot-REST&groupId=com.theitroad.spring&artifactId=Spring-Boot-REST&version=0.0.1-SNAPSHOT&description=Spring+Boot+REST+Example&packageName=com.theitroad.spring&type=maven-project&packaging=jar&javaVersion=10&language=java&bootVersion=2.0.2.RELEASE&dependencies=web
Spring REST端点配置
我们将创建一个@RestController并添加一些方法,并使用@RequestMapping对其进行注释。
下面是我们的REST Controller类,它公开了一些GET和POST端点。
package com.theitroad.spring; import org.springframework.stereotype.Component; @Component public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
请正确地完成上述程序,这是本教程最重要的部分。
很容易理解这里发生的事情:
当我们用
@ RestController
注释控制器类时,Spring Boot会扫描它来查找要配置的REST端点。方法上的@RequestMapping注释告诉Spring使用此方法作为任何客户端请求的处理程序。
这是非常重要的spring注释,我们可以配置其他功能,例如支持的HTTP方法,请求的Content-Type,响应内容类型等。
默认情况下,支持GET方法并返回JSON响应。
就是这样,我们的Spring Boot RESTful网络服务已经可以运行和测试了。
Spring Boot REST Web服务测试
当您运行主类时,请检查日志以了解端点配置。
package com.theitroad.spring; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class PersonController { @Autowired private Person person; @RequestMapping("/") public String healthCheck() { return "OK"; } @RequestMapping("/person/get") public Person getPerson(@RequestParam(name="name", required=false, defaultValue="Unknown") String name) { person.setName(name); return person; } @RequestMapping(value="/person/update", method=RequestMethod.POST) public Person updatePerson(@RequestParam(name="name", required=true) String name) { person.setName(name); return person; } }
一切似乎都不错,可以在浏览器本身中测试GET请求。
我正在使用Postman Chrome应用测试POST请求。
Spring Boot REST JSON请求响应
JSON是REST网络服务的标准消息格式,我不喜欢我们接受String作为POST请求,让我们更改接受JSON请求的方法。
2016-05-25 16:20:15.961 INFO 11802 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String com.theitroad.spring.PersonController.healthCheck() 2016-05-25 16:20:15.962 INFO 11802 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/person/get]}" onto public com.theitroad.spring.Person com.theitroad.spring.PersonController.getPerson(java.lang.String) 2016-05-25 16:20:15.962 INFO 11802 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/person/update],methods=[POST]}" onto public com.theitroad.spring.Person com.theitroad.spring.PersonController.updatePerson(java.lang.String)
就这样,方法注释中的几个更改就完成了。
现在,当您运行主程序时,它将为端点配置生成以下输出。
@RequestMapping(value="/person/update", method=RequestMethod.POST, consumes = "application/json") public Person updatePerson(@RequestBody Person p) { person.setName(p.getName()); return person; }