版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljk126wy/article/details/82724126
SpringBoot 开发resful api 比之前mvc restful api 更为快捷和简单。正所谓 没有对比就没有伤害,在介绍SpringBoot的写法之前,我们先看看SpringMVC 是如果实现 restful api的。在这里我将写一个用户的增删该查 restful 的api,这里只是简单实现一下 不再进行数据库连接代码开发。
0 公共代码
我们创建一个用户类 里面包含 用户名称 name 和 用户年龄age 成员变量
package cn.lijunkui.springbootlearn.restful.model;
public class User {
private String name;
private Integer age;
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;
}
}
1 SpringMVC restful API
package cn.lijunkui.springbootlearn.restful.controller;
import cn.lijunkui.springbootlearn.restful.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
/**
* SpringMVC restful api
*/
@RequestMapping("/mvcUser")
@ResponseBody
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("lijunkui");
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("lijunkui");
user.setAge(18);
log.info("删除用户成功:"+"id:{}",id);
}
}
2 mvc Api 测试
我们这里使用POSTMan 进行接口测试
2.1 查询id 为1 的用户
2.2 添加用户测试
2.3 全局修改用户测试
2.4 局部修改测试
2.5 删除测试
3 SpringBoot restful API
package cn.lijunkui.springbootlearn.restful.controller;
import cn.lijunkui.springbootlearn.restful.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
/**
* 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("lijunkui");
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("lijunkui");
user.setAge(18);
log.info("springboot 删除用户成功:"+"id:{}",id);
}
}
4 springBoot API 测试
4.1 查询测试
4.2 添加测试
4.3 全局修改测试
4.4 局部修改测试
4.5 删除测试
通过上面的代码我们发现 springBoot 比springMvc 简洁了很多 。
1 直接通过@RestController进行声明无需在类上在添加 @ResponseBody注解。
2 直接通过@GetMapping @PutMapping 进行声明其实get 和put方式提交 无需在@RequestMapping注解中添加method = RequestMethod.GET 来完成。
在进行开发是遇到啦问题 就是 put 修改时参数接受不到 然后百度查询需要配置HttpPutFormContentFilter 才可以。但是springBoot 没有xml 所以我们需要通过注解的方式来配置HttpPutFormContentFilter过滤器。
import org.springframework.stereotype.Component;
import org.springframework.web.filter.HttpPutFormContentFilter;
/**
* 解决restFul put 参数无法接收的问题
*/
@Component
public class PutFilter extends HttpPutFormContentFilter {
}
关于put 接受不到参数的解决方案
参考文献:https://www.aliyun.com/jiaocheng/852091.html