SpringBoot 实现RestFul 相关注解的介绍
如果说你会使用SpringMVC 那么下面的内容你阅读将会很轻松,我这里通过搭建一个用户管理 接口API 让你快速学会如何创建restful 风格的API 。我们没有对接数据库相关数据在代码中都是写死的。示例程序SpringBoot版本是2.1.0.RELEASE 对应SpringMVC版本是 5.1.2RELEASE 。
创建 restful 风格的API 的 需要使用到的注解
1 在我们接口Controller上声明 @RestController() 表明该类 RestFul 风格的Controller。
在对应的方法上声明如下标签:
2 @GetMapping() 用于生命在 Get方式访问的接口 该方式主要用于数据查询。
3 @PostMapping() 用于声明在 Post方式访问的接口 该方式主要用于数据新增。
4 @PutMapping() 用于声明在 Put方式访问的接口 该方式主要用于全部更新。
5 @PatchMapping() 用于声明在 Patch方式访问的接口 该方式主要用于局部更新。
6 @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