hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

基于MVC的RESTful作风的完成

2019-11-18杂谈搜奇网81°c
A+ A-

基于MVCRESTful作风的完成

1.RESTful作风论述

REST效劳是一种ROA(Resource-Oriented Architecture,面向资本的架构)运用。重要特性是要领信息存在于HTTP协定的要领中(GET,POST,PUT,DELETE),作用域存在于URL中。比方,在一个猎取装备资本列表的GET要求中,要领信息是GET,作用域信息是URI种包括的对装备资本的过滤、分页和排序等前提

优越的REST API不须要任何文档

1.1REST作风资本途径

REST作风的资本途径设想是面向资本的,资本的称号应当是正确形貌该资本的名词

资本途径概览:sheme://host:port/path?queryString

例:http://localhost:8080/bywlstudio/users/user?username=xiuer

1.2HTTP要领

GET用于读取检索查询过滤资本

PSOT用于建立一个资本

PUT用于修正更新资本、建立客户端保护主键信息的资本

DELETE用于删除资本

资本地点和HTTP要领连系在一起就能够完成对资本的完全定位

1.3RESTful作风API设想

上文报告了经由历程HTTP要领和资本途径对效劳器的一个资本举行定位的历程

接下来看一个REST作风API的设想

功用 形貌
增添/建立 POST/users PUT/users{id}建立客户端保护主键信息的资本
删除 DELETE/users/{id}
修正/更新 PUT/users/{id}
查询悉数 GET/users
主键查询 GET/users/{id} GET/users?id=26
分页作用域查询 GET/users?start=0&size=10 GET/users?07,2019-07,2020

能够看到经由历程这个RESTAPI都是经由历程对同一个资本的操纵,所差别的就是经由历程差别的HTTP要领来完成对资本差别的处置惩罚。

2.MVCREST的支撑

1.1重要经由历程注解来完成
  • @Controller申明一个处置惩罚要求的掌握器

  • @RequestMapping要求映照地点,它存在几个子注解关于完成REST作风来讲越发具有语义性

    • @GETMapping GET要求

    • @PUTMapping PUT要求

    • @POSTMapping POST要求

    • @DELETEMapping DELETE要求

  • @ResponseBody 将相应内容转换为JSON花样

  • @RequestBody 要求内容转换为JSON花样

  • @PathVariable("id")用于绑定一个参数

  • @RESTController 等同于@Controller+@ResponseBody在类上写了这个注解,标识这个类的一切要领只返回数据,而不举行视图跳转

1.2返回HTTP状况码

REST作风API一个最鲜亮的特性经由历程返回对应的HTTPStatus来推断客户端的操纵是不是完成

下面是spring中关于Http状况码形貌的罗列类,本文列举了罕见的状况码(读者若对此感兴趣能够检察HttpStatus源码)

 public enum HttpStatus{
     OK(200, "OK"),//用于效劳器有实体相应
     CREATED(201, "Created"),//建立了新实体,相应当实体
     NO_CONTENT(204, "No Content"),//效劳器一般相应,但无实体相应
     BAD_REQUEST(400, "Bad Request"),//客户端要求语法毛病
     NOT_FOUND(404, "Not Found"),//目的资本不存在
     INTERNAL_SERVER_ERROR(500, "Internal Server Error"),//效劳器内部毛病
     NOT_IMPLEMENTED(501, "Not Implemented"),//效劳器不支撑当前要求
 }

Spring返回状况码是经由历程@ResponseStatus注解或许ResponseEntity<?>类完成的。

@ResponseStatus体式格局

 @GetMapping(path = "/user/{id}" , produces = "application/json;charset=utf-8")
 @ResponseStatus(HttpStatus.OK)
 public User findUserById(@PathVariable("id")Integer id){
     User user = userService.findUserById(id);
     return user ;
 }

ResponseEntity<?>体式格局

 @GetMapping(produces = "application/json;charset=utf-8")
 public ResponseEntity<List<User>> findAll(){
     List<User> users = userService.findAll();
     return new ResponseEntity<List<User>>(users , HttpStatus.OK);
 }
1.3因为MVC默许不支撑PUTDELETE要领,所以须要手动开启

tomcat效劳器的web.xml文件中开启一下设置

 <servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
  <init-param>
  <param-name>debug</param-name>
  <param-value>0</param-value>
  </init-param>
  <init-param>
  <param-name>listings</param-name>
  <param-value>false</param-value>
  </init-param>
  <init-param>
         <param-name>readonly</param-name>
         <param-value>true</param-value><!--开启这个-->
  </init-param>
  <load-on-startup>1</load-on-startup>
  </servlet>

在项目的web.xml中设置

 <filter>
     <filter-name>HiddenHttpMethodFilter</filter-name>
     <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
   </filter>
 
   <filter-mapping>
     <filter-name>HiddenHttpMethodFilter</filter-name>
     <servlet-name>dispathcherServlet</servlet-name>
   </filter-mapping>

3.MVC完成REST代码完成

3.1实例环境
  • JDK1.8

  • maven3.60

  • tomcat9

3.2API设想
URI Description Response HTTPStatus
GET/users 猎取悉数用户 JSON 200
GET/users/{id} 猎取指定主键的用户 JSON 200
PUT/users/{id} 修正指定的主键的用户信息 JSON 200/201
POST/users 增添一个用户 JSON 201
DELETE/users/{id} 删除一个用户 void 204
3.3掌握层代码
 @RestController
 @RequestMapping("/users")
 public class UserControler {
 
     @Autowired
     private IUserService userService ;
 
     //REST作风完成要领
 
     /**
      * 查询一切
      * @return
      */
     @GetMapping(produces = "application/json;charset=utf-8")
     public ResponseEntity<List<User>> findAll(){
         List<User> users = userService.findAll();
         return new ResponseEntity<List<User>>(users , HttpStatus.OK);
    }
 
     /**、
      * 依据ID查询
      * @param id
      * @return
      */
 
     @GetMapping(path = "/{id}" , produces = "application/json;charset=utf-8")
     @ResponseStatus(HttpStatus.OK)
     public User findUserById(@PathVariable("id")Integer id){
         User user = userService.findUserById(id);
         return user ;
    }
     /**
      * 增添一个用户
      * 返回该用户
      */
     @PostMapping(produces = "application/json;charset=utf-8")
     @ResponseStatus(HttpStatus.CREATED)
     public User addUser(@RequestBody User user){
         User newUser = userService.addUser(user);
         return newUser ;
    }
 
     /**
      * 更新
      * @param user
      */
     @PutMapping(path = "/{id}" ,produces = "application/json;charset=utf-8")
     public ResponseEntity<User> updateUser(@PathVariable("id") Integer id , @RequestBody User user){
         user.setUid(id);
         //资本是不是修正
         boolean flag = userService.updateUser(user);
         User deUser = userService.findUserById(id);
         if(flag)
             return new ResponseEntity<User>(deUser,HttpStatus.CREATED);
         return new ResponseEntity<User>(deUser,HttpStatus.OK);
    }
 
     @DeleteMapping(path = "/{id}" , produces = "application/json;charset=utf-8")
     @ResponseStatus(HttpStatus.NO_CONTENT)
     public void delUser(@PathVariable("id") Integer id){
         User user = userService.findUserById(id);
         userService.delUser(id);
    }
 }

本文项目地点:https://github.com/946470326/MakerStack/tree/ssm

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
基于MVC的RESTful作风的完成

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282032.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>