首先,回顾并详细说明一下在快速入门中使用的@Controller@RestController@RequestMapping注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。

  • @Controller:修饰class,用来创建处理http请求的对象
  • @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
  • @RequestMapping:配置url映射

下面我们尝试使用Spring MVC来实现一组对User对象操作的RESTful API,配合注释详细说明在Spring MVC中如何映射HTTP请求、如何传参、如何编写单元测试。

RESTful API具体设计如下:

请求类型 URL 功能说明
GET /users 查询用户列表
POST /users 创建一个用户
GET /users/id 根据id查询一个用户
PUT /users/id 根据id更新一个用户
DELETE /users/id 根据id删除一个用户

User实体定义:


public class User { private Long id; private String name; private Integer age; // 省略setter和getter }

实现对User对象的操作接口


@RestController
@RequestMapping(value="/users")     // 通过这里配置使下面的映射都在/users下
public class UserController { // 创建线程安全的Map static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>()); @RequestMapping(value="/", method=RequestMethod.GET) public List<User> getUserList() { // 处理"/users/"的GET请求,用来获取用户列表 // 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递 List<User> r = new ArrayList<User>(users.values()); return r; } @RequestMapping(value="/", method=RequestMethod.POST) public String postUser(@ModelAttribute User user) { // 处理"/users/"的POST请求,用来创建User // 除了@ModelAttribute绑定参数之外,还可以通过@RequestParam从页面中传递参数 users.put(user.getId(), user); return "success"; } @RequestMapping(value="/{id}", method=RequestMethod.GET) public User getUser(@PathVariable Long id) { // 处理"/users/{id}"的GET请求,用来获取url中id值的User信息 // url中的id可通过@PathVariable绑定到函数的参数中 return users.get(id); } @RequestMapping(value="/{id}", method=RequestMethod.PUT) public String putUser(@PathVariable Long id, @ModelAttribute User user) { // 处理"/users/{id}"的PUT请求,用来更新User信息 User u = users.get(id); u.setName(user.getName()); u.setAge(user.getAge()); users.put(id, u); return "success"; } @RequestMapping(value="/{id}", method=RequestMethod.DELETE) public String deleteUser(@PathVariable Long id) { // 处理"/users/{id}"的DELETE请求,用来删除User users.remove(id); return "success"; } }

下面针对该Controller编写测试用例验证正确性,具体如下。当然也可以通过浏览器插件等进行请求提交验证。


@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MockServletContext.class)
@WebAppConfiguration
public class ApplicationTests { private MockMvc mvc; @Before public void setUp() throws Exception { mvc = MockMvcBuilders.standaloneSetup(new UserController()).build(); } @Test public void testUserController() throws Exception { // 测试UserController RequestBuilder request = null; // 1、get查一下user列表,应该为空 request = get("/users/"); mvc.perform(request) .andExpect(status().isOk()) .andExpect(content().string(equalTo("[]"))); // 2、post提交一个user request = post("/users/") .param("id", "1") .param("name", "测试大师") .param("age", "20"); mvc.perform(request) .andExpect(content().string(equalTo("success"))); // 3、get获取user列表,应该有刚才插入的数据 request = get("/users/"); mvc.perform(request) .andExpect(status().isOk()) .andExpect(content().string(equalTo("[{\"id\":1,\"name\":\"测试大师\",\"age\":20}]"))); // 4、put修改id为1的user request = put("/users/1") .param("name", "测试终极大师") .param("age", "30"); mvc.perform(request) .andExpect(content().string(equalTo("success"))); // 5、get一个id为1的user request = get("/users/1"); mvc.perform(request) .andExpect(content().string(equalTo("{\"id\":1,\"name\":\"测试终极大师\",\"age\":30}"))); // 6、del删除id为1的user request = delete("/users/1"); mvc.perform(request) .andExpect(content().string(equalTo("success"))); // 7、get查一下user列表,应该为空 request = get("/users/"); mvc.perform(request) .andExpect(status().isOk()) .andExpect(content().string(equalTo("[]"))); } }

至此,我们通过引入web模块(没有做其他的任何配置),就可以轻松利用Spring MVC的功能,以非常简洁的代码完成了对User对象的RESTful API的创建以及单元测试的编写。其中同时介绍了Spring MVC中最为常用的几个核心注解:@Controller,@RestController,RequestMapping以及一些参数绑定的注解:@PathVariable,@ModelAttribute,@RequestParam等。

完整案例

Spring Boot构建RESTful API与单元测试相关推荐

  1. Spring Boot 构建RESTful Web服务

    Spring Boot 构建RESTful Web服务 本指南将引导您完成使用Spring 创建" Hello World" RESTful Web服务的过程. 你会建立什么 您将 ...

  2. Spring Boot 通过Restful API,在PostMan 中返回数据

    Spring Boot 通过Restful API,在PostMan 中返回数据 资源组 新增 POST/resource_group/ad 请求体:格式:from-data参数:groupName= ...

  3. 使用Spring Boot构建RESTFul服务

    每个人都在谈论微服务,例如WSO2微服务框架 , Spring Boot等.由于我已经很长时间没有从事任何与Spring相关的项目了,所以我想到了使用Spring Boot实现一个简单的RESTFul ...

  4. Spring Boot与RESTful API

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇Spring Boot开发WEB页面文章中,我们介绍了如何搭建一个有页面的web项目,这一篇我们则着重讲一下Sprin ...

  5. Spring Boot集成Restful Api在线文档接口调试工具 Swagger

    文章目录 一.Swagger简介 Swagger有什么用? 二.环境准备 三.构建Spring Boot工程 四.引入Swagger依赖 五.编写一个Test控制器 六.配置Swagger 七.最终测 ...

  6. 如何使用MySQL和JPA使用Spring Boot构建Rest API

    Hi Everyone! For the past year, I have been learning JavaScript for full-stack web development. For ...

  7. Spring MVC中使用 Swagger2 构建Restful API

    0.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <span s ...

  8. dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3(十)之Spring MVC中使用 Swagger2 构建Restful API...

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/55047193 1.Swagger2是什么? ...

  9. springboot集成swagger2构建RESTful API文档

    在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...

最新文章

  1. python 重写__repr__与__str__函数
  2. 关于Android Force Close 出现的原因 以及解决方法
  3. Sys和system用户、sysdba 和sysoper系统权限、dba角色的区别
  4. 怎么判断适合学java_如何知道自己是否适合学习java开发
  5. erdas遥感图像几何校正_定量/高光谱遥感之—光谱分析技术
  6. 社团管理系统用c语言1000,图书馆管理系统C语言啊1000行啊,哪位老哥有啊??...
  7. Fragment学习笔记
  8. html标签之间去掉空白,html – 减少两个标签之间的空白差距
  9. KEIL中遇到WARNING: MULTIPLE CALL TO SEGMENT的解决方法
  10. FPGA零基础学习:Intel FPGA 开发流程
  11. 紫光拼音输入法 v6.9.0.22 绿色版
  12. 65位高校教师接龙晒工资,全国各地高校,给打算入高校的博士们参考!
  13. Gmail企业邮箱让中小企业免费拥有企业邮箱
  14. 微信二次开发sdk非ipad/android协议(很好用)
  15. python中的命令,python学习——python中命令行
  16. dart后端之jaguar基础配置
  17. 数据库连接池是什么?
  18. 坦然的面对一切都已经发生的事实
  19. 为什么单页面的seo不友好?如何解决这一问题?
  20. 梳理|对话系统中的DST

热门文章

  1. 微信公众平台开发(24) 自定义菜单功能开发
  2. 9.java.lang.ClassCastException
  3. 如何利用远程桌面连接CentOS的Desktop版本
  4. 将自己的APK变成系统的APK
  5. 让用户更改自己的帐号
  6. 手把手教你刷新BACKUP Bios
  7. 【机器学习】最简单易懂的行人检测功能实现
  8. MATLAB Simulink中如何实现锁相环
  9. 自相关矩阵和互相关矩阵的matlab实现
  10. [c语言 ] 用libev 写个echo服务器