Spring Boot入门(四):开发Web Api接口经常使用注解总结

在程序员的平常工做中,Web开发应该是占比很重的一部分,至少我工做以来,开发的系统基本都是Web端访问的系统,Web开发在这几年也是经历了很快的发展,前端也显得愈来愈重要,如今不少大一点的公司都实行先后端分离,让后端和前端只专一于本身的事,所谓术业有专攻,我我的也很是建议先后端分离。html

既然先后端分离了,那么后端确定须要提供Web Api接口给到前端,并返回前端须要的数据。前端

在Spring Boot中,开发Web Api接口主要使用如下几个注解:java

  • @Controller
  • @ResponseBody
  • @RestController
  • @RequestMapping
  • @PathVariable

其实,这些注解在Spring MVC里都有了,因此Spring Boot里的用法也和Spring MVC里基本同样。git

在Spring Boot之因此能使用,是由于在spring-boot-starter-web 这个starter pom中,已经引用了spring-web和spring-webmvc。程序员

接下来,咱们经过具体例子来说解下各个注解的使用方法。github

1.@Controller

新建控制器HelloController,添加@Controller注解,添加1个方法sayHello,添加@RequestMapping注解,代码以下:web

package com.zwwhnly.springbootdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String sayHello() {
        return "hello";
    }
}
复制代码

运行项目,在浏览器输入http://localhost:8080/hello访问,发现报以下错误:spring

报错的缘由是未找到对应的模板,那么如何解决呢?json

咱们先讲解下第一种解决方法,添加下thymeleaf模板,首先修改pom文件,添加以下配置:后端

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
复制代码

若是没有设置自动导入maven包的话,IDEA右下角会提示你导入,点击“Import Changes”。

而后在resources/templates目录下,新建hello.html文件(内容先随便写),再次运行项目,访问http://localhost:8080/hello,发现访问正常:

2.@ResponseBody

还有一种更简单的方法是在控制器上添加@ResponseBody注解:

package com.zwwhnly.springbootdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String sayHello() {
        return "hello";
    }
}
复制代码

此时的运行结果(直接返回字符串):

hello

3.@RestController

@RestController是Spring4.0推出的组合注解,至关于@Controller+@ResponseBody,咱们看下它的源码,也能看出:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}
复制代码

此时咱们就能够将代码简化为:

@RestController
public class HelloController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String sayHello() {
        return "hello";
    }
}
复制代码

4.@RequestMapping

@RequestMapping注解主要用来配置url映射,既能够添加到控制器上,也能够添加到控制器下的方法上,添加到方法上是对添加到控制器上的补充,举例说明:

新建图书类Book:

package com.zwwhnly.springbootdemo.model;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Book {
    private Integer bookId;
    private String bookName;
    private String bookAuthor;
    private Date purchaseDate;

    public Book(Integer bookId, String bookName, String bookAuthor, String purchaseDate) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        this.bookId = bookId;
        this.bookName = bookName;
        this.bookAuthor = bookAuthor;
        this.purchaseDate = simpleDateFormat.parse(purchaseDate);
    }

    public Integer getBookId() {
        return bookId;
    }

    public void setBookId(Integer bookId) {
        this.bookId = bookId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getBookAuthor() {
        return bookAuthor;
    }

    public void setBookAuthor(String bookAuthor) {
        this.bookAuthor = bookAuthor;
    }

    public Date getPurchaseDate() {
        return purchaseDate;
    }

    public void setPurchaseDate(Date purchaseDate) {
        this.purchaseDate = purchaseDate;
    }
}
复制代码

在HelloController中添加方法getBookList:

@RequestMapping(value = "/getBookList", method = RequestMethod.GET)
public List<Book> getBookList() {
    List<Book> books = new ArrayList<>();
    try {
         Book book1 = new Book(1, "平凡的世界", "路遥", "2010-01-01");
         Book book2 = new Book(2, "人生", "路遥", "2011-01-01");

         books.add(book1);
         books.add(book2);
    } catch (ParseException e) {
         e.printStackTrace();
    }

    return books;
}
复制代码

运行项目在浏览器输入http://localhost:8080/getBookList,结果为:

// 20190424140621
// http://localhost:8080/getBookList

[
  {
    "bookId": 1,
    "bookName": "平凡的世界",
    "bookAuthor": "路遥",
    "purchaseDate": "2009-12-31 16:00:00"
  },
  {
    "bookId": 2,
    "bookName": "人生",
    "bookAuthor": "路遥",
    "purchaseDate": "2010-12-31 16:00:00"
  }
]
复制代码

而后咱们在HelloController上也加上@RequestMapping注解:

package com.zwwhnly.springbootdemo.controller;

import com.zwwhnly.springbootdemo.model.Book;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping(value = "hello")
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String sayHello() {
        return "hello";
    }

    @RequestMapping(value = "/getBookList", method = RequestMethod.GET)
    public List<Book> getBookList() {
        List<Book> books = new ArrayList<>();
        try {
            Book book1 = new Book(1, "平凡的世界", "路遥", "2010-01-01");
            Book book2 = new Book(2, "人生", "路遥", "2011-01-01");

            books.add(book1);
            books.add(book2);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return books;
    }
}

复制代码

此时两个方法的访问地址就分别变为了:http://localhost:8080/hello/hello,http://localhost:8080/hello/getBookList。

5.@PathVariable

@PathVariable注解用来获取url中的数据,如下为具体的使用方法,

在HelloController控制器中添加方法getBook,经过占位符传递bookId:

@RequestMapping(value = "/getBook/{bookId}", method = RequestMethod.GET)
public Book getBook(@PathVariable Integer bookId) {
     Book book = null;
     List<Book> books = new ArrayList<>();
     try {
            Book book1 = new Book(1, "平凡的世界", "路遥", "2010-01-01");
            Book book2 = new Book(2, "人生", "路遥", "2011-01-01");

            books.add(book1);
            books.add(book2);

            book = books.get(bookId - 1);
        } catch (ParseException e) {
            e.printStackTrace();
    }

    return book;
}
复制代码

运行项目,在浏览器中访问http://localhost:8080/hello/getBook/1,结果以下:

// 20190424145348
// http://localhost:8080/hello/getBook/1

{
  "bookId": 1,
  "bookName": "平凡的世界",
  "bookAuthor": "路遥",
  "purchaseDate": "2009-12-31 16:00:00"
}
复制代码

注意:占位符里的名称必须和参数名彻底一致,区分大小写,不然访问会报500错误。

若是想不一致,能够写成以下方式:

@RequestMapping(value = "/getBook/{bookId}", method = RequestMethod.GET)
public Book getBook(@PathVariable("bookId") Integer bookIndex) {
      ......
}
复制代码

这种方式也要求,PathVariable的value属性值必须与占位符里的名称彻底一致。

好了,本篇文章就先讲解这么多,其它注解后续再单独发布文章讲解。

6.源码地址

原文地址:Spring Boot入门(四):开发Web Api接口经常使用注解总结

博客地址:www.zwwhnly.com

源码地址:github.com/zwwhnly/spr…

欢迎你们下载,有问题能够多多交流。

7.参考连接

用Spring Boot开发一个web API 接口返回数据

SpringBoot 中经常使用注解@Controller/@RestController/@RequestMapping介绍

相关文章
相关标签/搜索