查看原文
其他

玩转springboot2.x之restful api开发篇

桌前明月 Java学习之道 2022-08-24

点击上方"Java学习之道",选择"关注"公众号

优秀文章,第一时间收到!

文章已获得作者授权,原文地址: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

 -END-

 

玩转springboot2.x之IntellJ IDEA快速搭建

●你真的会高效的在GitHub搜索开源项目吗?

●当你在浏览器中输入“google.com”并回车,会发生什么?

周末休闲: 现实的抖音世界

    喜欢本文的朋友们,欢迎关注订阅号Java学习之道,收看更多精彩内容!

    一起努力吧!

文章好看就点这里

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存