Spring Boot与RESTful API

 2023-09-05 阅读 174 评论 0

摘要:2019独角兽企业重金招聘Python工程师标准>>> 在上一篇Spring Boot开发WEB页面文章中,我们介绍了如何搭建一个有页面的web项目,这一篇我们则着重讲一下Spring Boot对RESTful的支持。 常用注解介绍 首先需要介绍几个常用的注解: @Controll

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在上一篇Spring Boot开发WEB页面文章中,我们介绍了如何搭建一个有页面的web项目,这一篇我们则着重讲一下Spring Boot对RESTful的支持。

   常用注解介绍

     首先需要介绍几个常用的注解:

  • @Controller 用于标注控制层组件
  • @RestController 此注解等同于@Controller+@ResponseBody,返回json数据
  • @RequestMapping 映射URL
  • @PathVariable 是用来对指定请求的URL路径里面的变量
  • @ModelAttribute 1、绑定请求参数到指定对象;2、暴露表单引用对象为模型数据;3、暴露@RequestMapping方法返回值为模型数据
  • @RequestParam 用于将请求参数区数据映射到功能处理方法的参数上。

 HTTP动词

    对于资源的具体操作,由http动词表示,常用的http动词有以下五个(括号里是对应的SQL命令):

  • GET(SELETE) 从服务器取出资源(一个或者多个)
  • POST(CREATE) 在服务器新建一个资源
  • PUT(UPDATE) 在服务器更新资源(客户端提供改变后的完整资源)
  • PATCH(UPDATE) 在服务器更新资源(客户端提供改变的属性)
  • DELETE(DELETE) 从服务器删除资源

编写简单的RESTful API

    定义一个实体bean

public class Book {private String name;private String isbn;private String author;public String getAuthor() {return author;}public String getIsbn() {return isbn;}public String getName() {return name;}public void setAuthor(String author) {this.author = author;}public void setIsbn(String isbn) {this.isbn = isbn;}public void setName(String name) {this.name = name;}
}

    编写controller

@RestController
@RequestMapping("/book")
public class BookController {public static Map<String,Book> bookMap = new HashMap<String,Book>();/*** 添加一本书* @param book* @return*/@RequestMapping(value="/",method = RequestMethod.POST)public String postBook (@ModelAttribute Book book){bookMap.put(book.getIsbn(),book);return "SUCCESS";}/*** 查询出所有book集合* @return*/@RequestMapping(value="/",method = RequestMethod.GET)public List<Book> getBookList (){List<Book> bookList = new ArrayList<Book>(bookMap.values());return bookList;}/*** 根据ISBN获取book* @param isbn* @return*/@RequestMapping(value="/{isbn}",method = RequestMethod.GET)public Book getBook(@PathVariable String isbn){Book book = bookMap.get(isbn);return book;}/*** 更新book参数* @param isbn* @param book* @return*/@RequestMapping(value="/{isbn}",method = RequestMethod.PUT)public String putBook(@PathVariable String isbn,@ModelAttribute Book book){Book b = bookMap.get(isbn);b.setAuthor(book.getAuthor());b.setName(book.getName());bookMap.put(isbn,b);return "SUCCESS";}/*** 根据isbn删除book* @param isbn* @return*/@RequestMapping(value="/{isbn}",method = RequestMethod.DELETE)public String deleteBook(@PathVariable String isbn){bookMap.remove(isbn);return "SUCCESS";}
}

    至此一个简单的RESTful API就写完了,大家可以通过浏览器插件来验证正确性,此处我们使用单元测试对接口进行验证

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MockServletContext.class)
@WebAppConfiguration
public class DemoApplicationTests {private MockMvc mvc;@Beforepublic void setUp() throws Exception {mvc = MockMvcBuilders.standaloneSetup(new BookController()).build();}String json = "[{\"name\":\"三国演义\",\"isbn\":\"1234\",\"author\":\"罗贯中\"}]";String json2 = "{\"name\":\"三国演义12\",\"isbn\":\"1234\",\"author\":\"罗贯中12\"}";@Testpublic void contextLoads() throws Exception {// 测试ControllerRequestBuilder request = null;//添加一本书request = post("/book/").param("name", "三国演义").param("isbn", "1234").param("author", "罗贯中");mvc.perform(request).andExpect(content().string(equalTo("SUCCESS")));//获取书本列表,应该有刚才插入的数据request = get("/book/");mvc.perform(request).andExpect(status().isOk()).andExpect(content().string(equalTo(json)));//更新书名和作者request = put("/book/1234").param("name", "三国演义12").param("author", "罗贯中12");mvc.perform(request).andExpect(content().string(equalTo("SUCCESS")));//获取isbn1234的书,查看是否修改成功request = get("/book/1234");mvc.perform(request).andExpect(content().string(equalTo(json2)));//删除request = delete("/book/1234");mvc.perform(request).andExpect(content().string(equalTo("SUCCESS")));//查询是否删除成功request = get("/book/");mvc.perform(request).andExpect(status().isOk()).andExpect(content().string(equalTo("[]")));}}

    至此我们完成了对API的验证,不需要多余的配置,我就完成了Spring MVC的功能,完成了一个简单的RESTful接口。

转载于:https://my.oschina.net/wangxincj/blog/809285

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/881.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息