RESTful是web应用提出的一种改进,提高系统的可伸缩性,并降低开发难度。方便前后端分离开发。
RESTful API可以理解为:
动作+资源标识符
动作:请求 类型(POST,GET,DELETE,PUT,PATCH)
资源标识符:URI
RESTful建议:1. 资源标识符应使用名词
2. 尽量使复数
@RequestBody可以认为是@RequestParam的增强版,因为@RequestBody不仅可以处理application/x-www-form-urlencoded编码方式的请求数据还可以处理raw编码方式,请求体为aplication/json、application/xml等格式的请求数据
@ResponseBody注解的方法返回值直接转换成JSON、XML或文本响应,@ResponseBody也可以修饰控制器,那么就相当于控制器所有的方法都用@ResponseBody修饰了。
控制器:
@Controller
@Component
public class UserController
{
@Resource(name="userService")
private UserService userService;
@PostMapping("/books")
@ResponseBody
public ResponseEntity<String> addBook(@RequestBody Book book)
{
if (userService.addBook(book)>0)
{
var headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE,"text/plain;charset=utf-8");
return new ResponseEntity<>("恭喜您添加图书成功",headers, HttpStatus.OK);
}
return new ResponseEntity<>("添加图书失败",HttpStatus.EXPECTATION_FAILED);
}
}
addBook的返回值是ResponseEntity
ResponseEntity是HttpEntity的子类两者都可指定
args1:请求体
args2:请求头
其中ResponseEntity还可以多指定一个响应状态码
args3:响应状态码
Book.java
public class Book
{
private Integer id;
private String name;
private Double price;
private String author;
//省略setter、getter方法
}
UserServiceImpl .java
public class UserServiceImpl implements UserService
{
private static List<Book> bookList = new ArrayList<Book>();
private static Integer currentId = 1;
@Override
public Integer addBook(Book book)
{
book.setId(currentId++);
bookList.add(book);
System.out.println("---------------------------"+ bookList);
return book.getId();
}
}
输出:
---------------------------[Book{id=1, name=‘HTTP图解’, price=32.8, author=‘上野宣’}, Book{id=2, name=‘HTTP图解’, price=32.8, author=‘上野宣’}, Book{id=3, name=‘HTTP图解’, price=32.8, author=‘上野宣’}, Book{id=4, name=‘HTTP图解’, price=32.8, author=‘上野宣’}]
用postman测试
tips:项目需要JSON解析工具。Jackson和Google Gson都可以,添加其jar包到项目中就可