Spring Boot与RESTful API

原创
2016/12/20 21:53
阅读数 2.6K

在上一篇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;
	@Before
	public void setUp() throws Exception {
		mvc = MockMvcBuilders.standaloneSetup(new BookController()).build();
	}
	String json = "[{\"name\":\"三国演义\",\"isbn\":\"1234\",\"author\":\"罗贯中\"}]";
	String json2 = "{\"name\":\"三国演义12\",\"isbn\":\"1234\",\"author\":\"罗贯中12\"}";
	@Test
	public void contextLoads() throws Exception {
		// 测试Controller
		RequestBuilder 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接口。

展开阅读全文
打赏
2
22 收藏
分享
加载中

引用来自“wuwanglanqian”的评论

你好,后台怎么把前台的代码拿到自己这边,实现前后台联调,我的后台这边只能看到json数据,不能在前台那边看到。

引用来自“老虎是个蛋蛋”的评论

没太明白你什么意思
swagger只是说了后台,那我怎么通过前台跟后台结合,进行debug,就是说我怎么看到前台界面,通过swagger我只是看到了接口,跟接库数据,没看到前台页面的展示
2018/06/19 10:52
回复
举报

引用来自“wuwanglanqian”的评论

你好,后台怎么把前台的代码拿到自己这边,实现前后台联调,我的后台这边只能看到json数据,不能在前台那边看到。
没太明白你什么意思
2018/06/14 19:27
回复
举报
你好,后台怎么把前台的代码拿到自己这边,实现前后台联调,我的后台这边只能看到json数据,不能在前台那边看到。
2018/06/14 10:50
回复
举报
@老虎是个蛋蛋 看看#ActFramework#写RESTful接口的方式: https://github.com/greenlaw110/todomvc-act
2017/03/09 20:29
回复
举报

引用来自“阿卡”的评论

引用来自“老虎是个蛋蛋”的评论

引用来自“阿卡”的评论

jpa如何验证是否操作成功没看明白

@阿卡不是有单元测试吗
单元测我一直不太会,你出一个蛋总

@阿卡我抽时间写个吧
2017/03/09 15:23
回复
举报

引用来自“老虎是个蛋蛋”的评论

引用来自“阿卡”的评论

jpa如何验证是否操作成功没看明白

@阿卡不是有单元测试吗
单元测我一直不太会,你出一个蛋总
2017/03/09 15:22
回复
举报

引用来自“阿卡”的评论

jpa如何验证是否操作成功没看明白

@阿卡不是有单元测试吗
2017/03/09 15:14
回复
举报
jpa如何验证是否操作成功没看明白
2017/03/09 15:12
回复
举报
更多评论
打赏
8 评论
22 收藏
2
分享
返回顶部
顶部