SpringBoot 实现RestFul 相关注解的介绍

如果说你会使用SpringMVC 那么下面的内容你阅读将会很轻松,我这里通过搭建一个用户管理 接口API 让你快速学会如何创建restful 风格的API 。我们没有对接数据库相关数据在代码中都是写死的。示例程序SpringBoot版本是2.1.0.RELEASE 对应SpringMVC版本是 5.1.2RELEASE 。

创建 restful 风格的API 的 需要使用到的注解

1 在我们接口Controller上声明 @RestController() 表明该类 RestFul 风格的Controller。

在对应的方法上声明如下标签:

@GetMapping() 用于生命在 Get方式访问的接口 该方式主要用于数据查询。

@PostMapping() 用于声明在 Post方式访问的接口 该方式主要用于数据新增。

@PutMapping() 用于声明在 Put方式访问的接口 该方式主要用于全部更新。

@PatchMapping() 用于声明在 Patch方式访问的接口 该方式主要用于局部更新。

@DeleteMapping() 用于声明在 Delete 方式访问的接口 该方式主要用于数据删除。

上面这些注解在Spirng4.0 中也同样适用,但是在SpringMVC 3.0 中我们需要通过@Controller 和 @ResponseBody 来达到 @RestController()的效果。

对于@GetMapping() 和 @PostMapping() 等是通过 @RequestMapping()的method 属性来实现的例如: @RequestMapping(value = "",method = RequestMethod.POST)。

put 方式接受不到参数问题解决

在进行开发是遇到啦问题就是把修改时参数接受不到然后百度查询需要配置HttpPutFormContentFilter才可以。但是springBoot没有xml所以我们需要通过注解的方式来配置HttpPutFormContentFilter过滤器。

/*** 解决restFul put 参数无法接收的问题*/
@Component
public class PutFilter extends HttpPutFormContentFilter {
}

参考文献:HTTPS://www.aliyun.com/jiaocheng/852091.html

示例程序代码介绍

用户Model的代码

下面是我们用户的Model类 用户类里面包含用户名称name和用户年龄年龄成员变量。

package com.zyzx.model;import com.zyzx.custominterface.AddrWithEnum.AddrEnum;
import com.zyzx.custominterface.AddrWithEnum;import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;public class User {@NotEmpty(message="请输入您的名称!")private String name;@Max(value = 100, message = "年龄必须在20-100之间!")@Min(value= 20 ,message= "年龄必须在20-100之间!" )private Integer age;@AddrWithEnum(addr = AddrEnum.BEIJING)private String addr;public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

用户Controller类声明RestController

package com.zyzx.controller;import com.zyzx.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;import javax.validation.Valid;/*** SpringBoot restful api*/
@RestController()
@RequestMapping("/bootUser")
public class SBootRestController {Logger log = LoggerFactory.getLogger(SmvcRestController.class);/*** 根据用户id 查询用户* @return*/@GetMapping("/{id}")public User get(@PathVariable(name = "id") Long id){User user = new User();user.setName("zhangsan");user.setAge(18);log.info("springboot查询用户成功:"+"id:{}",id);return user;}/*** 添加用户*/@PostMapping()public User add(@Valid User user,BindingResult bindingResult){if(bindingResult.hasErrors()) {String defaultMessage = bindingResult.getFieldError().getDefaultMessage();System.out.println(defaultMessage);return null;}log.info("springboot添加用户成功:"+"name:{},age:{}",user.getName(),user.getAge());return user;}@PutMapping()public void updatePut(User user){log.info("springboot Put 修改用户成功:"+"name:{},age:{}",user.getName(),user.getAge());}/*** 局部更新*/@PatchMapping("/{name}")public void updatePatch(@PathVariable("name") String name){log.info("springboot Patch 修改用户成功:"+"name:{}",name);}/*** 删除用户*/@DeleteMapping("/{id}")public void delete(@PathVariable("id") Long id){User user = new User();user.setName("zhangsan");user.setAge(18);log.info("springboot 删除用户成功:"+"id:{}",id);}
}
package com.zyzx.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import com.zyzx.model.User;
@RequestMapping("/mvcUser")
@ResponseBody
@Controller
public class SmvcRestController {Logger log = LoggerFactory.getLogger(SmvcRestController.class);/*** 根据用户id 查询用户* @return*/@RequestMapping(value = "/{id}",method = RequestMethod.GET )public User get(@PathVariable(name = "id") Long id){User user = new User();user.setName("zhangsan");user.setAge(18);log.info("查询用户成功:"+"id:{}",id);return user;}/*** 添加用户*/@RequestMapping(value = "",method = RequestMethod.POST)public void add(User user){log.info("添加用户成功:"+"name:{},age:{}",user.getName(),user.getAge());}/*** 全部替换修改* @param user*/@RequestMapping(value = "",method = RequestMethod.PUT)public void updatePUT(User user){log.info("修改用户成功:"+"name:{},age:{}",user.getName(),user.getAge());}/*** 局部修改用户名称* @param name*/@RequestMapping(value = "",method = RequestMethod.PATCH)public void updatePATCH(String name){log.info("修改用户成功:"+"name:{}",name);}/*** 删除用户*/@RequestMapping(value = "{id}",method = RequestMethod.DELETE)public void delete(@PathVariable("id") Long id){User user = new User();user.setName("zhangsan");user.setAge(18);log.info("删除用户成功:"+"id:{}",id);}
}

查询用户接口

@GetMapping("/{id}")
public User get(@PathVariable(name = "id") Long id){User user = new User();user.setName("zhangsan");user.setAge(18);log.info("springboot查询用户成功:"+"id:{}",id);return user;
}

添加用户接口

@PostMapping()public void add(User user){​  log.info("springboot添加用户成功:"+"name:{},age:{}",user.getName(),user.getAge());
​    }

全部修改用户接口

@PutMapping() public void updatePut(User user){

​ log.info("springboot Put 修改用户成功:"+"name:{},age:{}",user.getName(),user.getAge()); ​ }

局部修改用户接口

@PatchMapping("/{name}")
public void updatePatch(@PathVariable("name") String name){log.info("springboot Patch 修改用户成功:"+"name:{}",name);
}

删除用户的接口

@DeleteMapping("/{id}")
public void delete(@PathVariable("id") Long id){User user = new User();user.setName("zhangsan");user.setAge(18);log.info("springboot 删除用户成功:"+"id:{}",id);
}

application.properties文件

server.port=8090
server.servlet.context-path=/sbe

用户管理API测试

查询测试

添加测试

2019-06-18 22:40:22.398  INFO 8552 --- [nio-8090-exec-3] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-06-18 22:40:22.407  INFO 8552 --- [nio-8090-exec-3] o.s.web.servlet.DispatcherServlet        : Completed initialization in 9 ms
2019-06-18 22:40:22.449  INFO 8552 --- [nio-8090-exec-3] com.zyzx.controller.SmvcRestController   : 查询用户成功:id:1

全局修改测试

2019-06-18 22:43:36.429  INFO 8552 --- [nio-8090-exec-6] com.zyzx.controller.SmvcRestController   : springboot Put 修改用户成功:name:lisi,age:17

局部修改测试

2019-06-18 22:46:17.724  INFO 8552 --- [nio-8090-exec-3] com.zyzx.controller.SmvcRestController   : springboot Patch 修改用户成功:name:lisia

删除测试

2019-06-18 22:47:40.549  INFO 8552 --- [nio-8090-exec-4] com.zyzx.controller.SmvcRestController   : springboot 删除用户成功:id:1

SpringBoot2.1.5(39)--- 开发restful 风格Api相关推荐

  1. java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口

    写在前面的话 这篇文章计划是在过年期间完成的,示例代码都写好了,结果亲戚来我家做客,文章没来得及写.已经很久没有更新文章了,小伙伴们,有没有想我啊.言归正传,下面开始,今天的话题. 目标 写一套符合规 ...

  2. SpringBoot开发Restful风格的接口实现CRUD功能

    一.前言 我们都知道SpringBoot的出现使得在开发web项目的时候变得更加方便.快捷.之前写过一篇文章是如何快速搭建一个springboot项目:SpringBoot入门:使用IDEA和Ecli ...

  3. RESTful风格API详解

    在学习RESTful 风格接口之前,即使你不知道它是什么,但你肯定会好奇它能解决什么问题?有什么应用场景?听完下面描述我想你就会明白: 在互联网并没有完全流行的初期,移动端也没有那么盛行,页面请求和并 ...

  4. 用cxf开发restful风格的WebService

    我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...

  5. Spring MVC开发RESTful风格的URI

    一.写在前面 RESTful结构可参考博文:https://blog.csdn.net/codejas/article/details/79799386 我们知道在HTTP 协议中,有四种操作方式的动 ...

  6. SpringBoot RESTful 风格 API 多语言国际化i18n解决方案

    文章目录 1 摘要 2 核心代码 2.1 多语言枚举类 2.2 多语言处理工具类 2.3 多语言的API返回状态码枚举类 2.4 多语言 API 接口返回结果封装 2.5 i18n 国际化多语言配置文 ...

  7. 在原有的SSH项目上开发RESTful风格的HTTP接口

    最近做一个需求,其中有个节点涉及到需要在传统的SSH项目中开发RESTful风格的HTTP接口,供请求方访问,获取结果,响应处理结果,其开发风格与spring cloud中控制器(controller ...

  8. 团队RESTful 风格API规范

    实际上就是用RESTful风格来包装HTTP协议,并用json或xml格式实现数据交互. RESTful风格: 网络资源实体化,CURD对资源进行操作. 好的规范评判标准:直观.扩展.优雅 1.数据交 ...

  9. 学习笔记-Spring Boot 开发 RESTful Web API(一)

    题记: 本篇是Spring Boot 开发学习系列中基础知识学习的一部分,为 RESTful Web API 相关基础知识,为实践操作奠定理论基础. REST不是一个标准,而是一种软件应用架构风格.基 ...

最新文章

  1. R语言实战应用精讲50篇(二十九)-R语言算法应用案例:路径路网轨迹绘图分析(英国自行车数据库)
  2. 软件测试-PR录制脚本程序ie的时候闪退
  3. 反反复复的磁盘丢失故障处理过程
  4. Docker网络通信openvswitch(来自龙果学院学习资料 + 自己实验结果)
  5. 计算机网络课程设计之网络代理服务器的设计与实现
  6. scala数据类型_Scala数据类型示例教程
  7. 计算机常用英语词汇及读音,e发音的单词有哪些
  8. JAVA图书馆管理系统各个项目链接
  9. Noi2001 食物链(入门oj Problem 1706)
  10. 关于ChartControl的绑定数据源使用
  11. echarts 叠加柱状图柱顶显示百分比
  12. Network Manager Applet(/usr/bin/nm-applet) wants access to the default keyring but it is locked
  13. 如何修改网易邮箱大师电脑端的消息提示音?超简单
  14. 软考--后缀式(逆波兰式)的两种求法
  15. 如何创建一个微信公众号(手把手、超详细)
  16. 记一次字段类型强转导致的死锁
  17. 【光学】Matlab模拟几何光学中的球差、彗差、像散、场曲四种像差
  18. HTTP的几种请求方法
  19. 如何使用Python发送库存更新
  20. unity urp 实现遮挡显示角色轮廓

热门文章

  1. 【MATLAB技巧】——求解符号方程
  2. 嵌入式Linux系统编程学习之四Shell编程
  3. 力扣883.三维体投影面积
  4. NOIP2009 最优贸易
  5. 20172310《程序设计与数据结构》(上)课程总结
  6. CSS设置背景透明字体不透明
  7. JS 中通过对象关联实现『继承』
  8. iOS开发UI篇—Quartz2D简单使用(二)
  9. c/s架构nginx+php-fpm通信原理
  10. Linux 命令 - curl: transfer a URL