玩转Spring Boot 2.x 之 Restful API开发篇
原创: 桌前明月
链接:https://zhuoqianmingyue.blog.csdn.net/article/details/82724126
SpringBoot开发resful api更为快捷和简单。其实springboot 也是使用的springmvc,springboot不是springmvc的升级版本,以下内容主要是springmvc3 和springmvc4 使用方式介绍。
1、用户管理公共代码
我么这里通过springboot框架开发一个用户管理的restful api,同时介绍springmvc4 和springmvc5的区别。下面是我们用户的Model类 用户类里面包含用户名称name和用户年龄年龄成员变量。
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; } }
2、SpringMVC3.0 restful API
在springmvc4.0 开发restful api 需要我们通过@Controller 和 @ResponseBody 来声明Controller 为 restful的Controller。
@RequestMapping("/mvcUser") @ResponseBody public class SmvcRestController { ...... }
每个对应的api 需要通过在 @RequestMapping 中定义:
method = RequestMethod.GET(查询) RequestMethod.POST(新增加) RequestMethod.PUT(修改) method = RequestMethod.DELETE(删除)
例如下图代码示例:
@RequestMapping(value = "/{id}",method = RequestMethod.GET ) public User get(@PathVariable(name = "id") Long id){ ........ }
具体代码如下:
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); } }
3、mvc3.0 Api测试
我们这里使用POSTMan进行接口测试。
3.1查询id为1的用户
3.2添加用户测试
3.3全局修改用户测试
3.4局部修改测试
3.5删除测试
4、SpringMVC4.0 restful API
5.0版本后我们可以通过 @RestController 来替换原来使用@Controller 和 @ResponseBody 的写法来声明restfull 的Controller
同时对于不同类型的api 我们可以通过 @GetMapping @PostMapping @PutMapping 等 来替换原本在@RequestMapping 中指定method的方式。
具体代码如下:
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); } }
5、SpringMVC4.0 API测试
5.1查询测试
5.2添加测试
5.3全局修改测试
5.4局部修改测试
5.5删除测试
通过上面的代码我们发现springmvc3.0比springmvc4.0简洁了很多。
1.直接通过@RestController进行声明无需在类上在添加@ResponseBody注解。
2.直接通过@GetMapping @PutMapping进行声明其实get和put方式提交无需在@RequestMapping注解中添加方法= RequestMethod.GET来完成。
6、put 方式接受不到参数问题解决
在进行开发是遇到啦问题就是把修改时参数接受不到然后百度查询需要配置HttpPutFormContentFilter才可以。但是springBoot没有xml所以我们需要通过注解的方式来配置HttpPutFormContentFilter过滤器。
import org.springframework.stereotype.Component; import org.springframework.web.filter.HttpPutFormContentFilter; /** * 解决restFul put 参数无法接收的问题 */ @Component public class PutFilter extends HttpPutFormContentFilter { }
7、关于put接受不到参数的解决方案
参考文献:https://www.aliyun.com/jiaocheng/852091.html