驻马店河南网站建设,网站需求分析的重要,制作网站的完整步骤,关键词排名监控批量查询★ RESTful服务
RESTful服务是“前后端分离”架构中的主要功能#xff1a;
后端应用对外暴露RESTful服务#xff0c;前端应用则通过RESTful服务与后端应用交互。后端应用 RESTful接口 ------------------ 前端★ 基于JSON的RESTful服务
使用RestController注解…★ RESTful服务
RESTful服务是“前后端分离”架构中的主要功能
后端应用对外暴露RESTful服务前端应用则通过RESTful服务与后端应用交互。后端应用 RESTful接口 ------------------ 前端★ 基于JSON的RESTful服务
使用RestController注解修饰控制器类或使用ResponseBody修饰处理方法即可。
RestController和Controller的区别就在于RestController会自动为每个处理方法都添加ResponseBody注解。
RequestBody用于修饰处理方法的参数用于获取RESTful提交的请求数据。
RESTful有一个约定主要是对URL有约定比如对于一个操作图书的RESTful接口GET /books/{id} - 获取数据 获取指定id的图书
GET /books?参数 -获取数据 获取符合查询参数的图书
GET /books -获取数据 获取所有图书
POST /books -添加数据 添加图书
PUT /books/{id} -更新数据 更新指定ID的图书
DELETE /books/{id} -删除数据 删除指定ID的图书
DELETE /books?参数 -删除数据 删除符合指定参数的图书Restful处理方法的返回值通常都应该使用HttpEntity或ResponseEntity。 HttpEntity 只能额外地指定响应头不支持指定响应码。↑ResponseEntity 可额外指定响应的响应头、响应码HttpStatus代表ResponseEntity 继承 HttpEntity 代码演示
总结就只是前端用 get 、 post 、 put 、 delete 发起请求 后端用 GetMapping前端获取数据、PostMapping前端推送数据、 PutMapping前端修改数据、DeleteMapping前端删除数据 接收就是 RESTful风格了。
基础数据
1、Get 请求 前段根据id查看图书
2、查看所有图书前端用get请求
3、添加图书前端用 post 请求
4、根据id更新图书信息前端用 put 进行请求
5、根据id删除图书前端用delete 发起请求
总结
如图三个方法的访问路径都是一样的不同的只是请求的方式不同一个是get一个是put一个是delete这就是 restful 风格项目会自动识别。
完整代码
Book
Data
public class Book
{private Integer id;private String name;private double price;private String author;public Book(Integer id, String name, double price, String author){this.id id;this.name name;this.price price;this.author author;}
}BookController
package cn.ljh.app.controller;import cn.ljh.app.domain.Book;
import cn.ljh.app.service.BookService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;import java.util.List;/** GET /books/{id} - 获取数据 获取指定id的图书* GET /books?参数 -获取数据 获取符合查询参数的图书* GET /books -获取数据 获取所有图书* POST /books -添加数据 添加图书* PUT /books/{id} -更新数据 更新指定ID的图书* DELETE /books/{id} -删除数据 删除指定ID的图书* DELETE /books?参数 -删除数据 删除符合指定参数的图书** Restful处理方法的返回值通常都应该使用HttpEntity或ResponseEntity。**/RequestMapping(/books)
RestController
public class BookController
{//有参构造器进行依赖注入private BookService bookService;public BookController(BookService bookService){this.bookService bookService;}//根据id查看图书GetMapping(/{id})public ResponseEntityBook viewBookById(PathVariable Integer id){Book book bookService.getBookById(id);//参数1响应数据体 参数2需要添加的响应头没有就给个null 参数3:响应码 OK 代表 200return new ResponseEntity(book, null, HttpStatus.OK);}//查看所有图书GetMapping()public ResponseEntityListBook viewBooks(){ListBook allBooks bookService.getAllBooks();return new ResponseEntity(allBooks, null, HttpStatus.OK);}//添加图书PostMapping()public ResponseEntityBook addBook(RequestBody Book book){Book b bookService.addOrUpdateBook(book);//HttpStatus.CREATED 代表返回的状态码为 201return new ResponseEntity(b, null, HttpStatus.CREATED);}//根据id更新图书信息PutMapping(/{id})public ResponseEntityBook updateBookById(PathVariable Integer id, RequestBody Book book){book.setId(id);Book b bookService.addOrUpdateBook(book);return new ResponseEntity(b, null, HttpStatus.OK);}//根据id删除图书DeleteMapping(/{id})public ResponseEntityBook deleteBookById(PathVariable Integer id){Book book bookService.deleteBookById(id);return new ResponseEntity(book, null, HttpStatus.OK);}}BookService
package cn.ljh.app.service;import cn.ljh.app.domain.Book;import java.util.List;public interface BookService
{//根据id查看图书Book getBookById(Integer id);//查看所有图书ListBook getAllBooks();//添加/修改图书Book addOrUpdateBook(Book book);//根据id删除图书Book deleteBookById(Integer id);}BookServiceImpl
package cn.ljh.app.service.impl;import cn.ljh.app.domain.Book;
import cn.ljh.app.service.BookService;
import org.springframework.stereotype.Service;import java.util.*;
import java.util.concurrent.ConcurrentHashMap;Service
public class BookServiceImpl implements BookService
{//创建一个线程安全的map集合存数据假设为数据库static MapInteger, Book bookDB new ConcurrentHashMap();static int nextId 1;//初始化数据库的数据static{bookDB.put(nextId, new Book(nextId, 火影忍者, 120, 岸本));bookDB.put(nextId, new Book(nextId, 七龙珠, 121, 鸟山明));}//根据id查看图书Overridepublic Book getBookById(Integer id){if (id ! null){Book book bookDB.get(id);if (book!null){return book;}}throw new RuntimeException(根据id查看图书失败);}//查看所有图书Overridepublic ListBook getAllBooks(){//获取map中的所有数据CollectionBook mapBooks bookDB.values();//强转ListBook books new ArrayList(mapBooks);return books;}//添加/修改图书Overridepublic Book addOrUpdateBook(Book book){if (book.getId() ! null){//修改//map的key是唯一的所以map里面有这个key的话直接把原来的value覆盖掉bookDB.put(book.getId(),book);return book;}else {//新增//为新增的图书设置idbook.setId(nextId);//book添加完之后这个id才会自增bookDB.put(nextId,book);return book;}}//根据id删除图书Overridepublic Book deleteBookById(Integer id){Book book bookDB.remove(id);return book;}
}