《深入Spring Boot (一):快速入门》中示例代码使用SpringMVC编写了一个简单的Web应用,本篇将继续使用SpringMVC框架编写复杂的Web服务。本篇主要包含以下3部分内容:
1.推荐包结构
在进行SpringMVC框架整合之前,先来了解一下Spring Boot官方推荐的包结构最佳实践。Spring Boot推荐将Application启动类放在根包下,例如包层级划分如com.example.controller、com.example.service、com.example.dao等,com.example则是根包,Application启动类推荐放在com.example包下,具体如下图所示。
这样做的好处是使用@SpringBootApplication注解标注Application类的时可以省略指定scanBasePackages属性,并且应用启动时默认只扫描Application类所在的包及其子包。
2.代码实践
以银行信息的Web服务为例,编写处理多种请求的银行信息服务。
首先,新建Gradle项目并添加spring-boot-starter-web模块,具体代码如下:
plugins { id 'java' } group 'spring-boot' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { jcenter() } dependencies { compile("org.springframework.boot:spring-boot-starter-web:2.0.0.RELEASE") testCompile("org.springframework.boot:spring-boot-starter-test:2.0.0.RELEASE") }
编写应用启动类Application.java,具体代码如下:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
编写银行实体类Bank.java,具体代码如下:
public class Bank implements Serializable{ private Long id; private String bankName; private String bankCode; //省略getter和setter }
编写银行信息Web服务接口类BankController.java,具体代码如下:
@RestController @RequestMapping("/banks") public class BankController { //根据id查询银行信息 @RequestMapping(value = "/{id}", method = RequestMethod.GET) public Bank getBank(@PathVariable Long id) { return Bank.newBuilder() .withId(id) .withBankName("中国工商银行") .withBankCode("ICBC") .build(); } //查询全部银行信息 @RequestMapping(value = "/list", method = RequestMethod.GET) public List<Bank> getAllBanks() { Bank icbc = Bank.newBuilder() .withId(100L) .withBankName("中国工商银行") .withBankCode("ICBC") .build(); Bank cmb = Bank.newBuilder() .withId(101L) .withBankName("中国招商银行") .withBankCode("CMB") .build(); return new ArrayList<Bank>() { { add(icbc); add(cmb); } }; } //新建一条银行信息 @RequestMapping(value = "/create", method = RequestMethod.POST) public String create(@ModelAttribute Bank bank) { //省略校验及保存操作 return "SUCCESS"; } //根据id删除一条银行信息 @RequestMapping(value = "/del/{id}", method = RequestMethod.DELETE) public String delete(@PathVariable Long id) { //省略删除操作 return "SUCCESS"; } //修改一条银行信息 @RequestMapping(value = "/put/{bankId}", method = RequestMethod.PUT) public String update(@PathVariable Long bankId, @ModelAttribute Bank bank) { //省略查询、更新操作 return "SUCCESS"; } }
运行Application类的main方法就可以提供银行信息Web服务了,可以使用postman工具发送请求验证。
3.代码解析
BankController中使用到了@RestController、@RequestMapping、@PathVariable和@ModelAttribute注解,这些都是SpringMVC框架的spring-web包中的注解。
代码中除了上述这些配置并不需要其它配置了,因为Spring Boot提供了Spring MVC的自动配置功能,这些自动的配置是根据项目依赖的jar自动开启的,其实是@EnableAutoConfiguration注解的功劳,具体如何实现自动配置的,在《深入Spring Boot (一):快速入门》中已经详细解析过。
Spring Boot虽说提供了自动默认配置,但有时可能需要改变某些默认配置,后续篇幅将深入介绍如何修改这些默认配置。
END
如果觉得有收获,记得关注、点赞、转发。