Springboot的rest风格

rest风格严格意义上说不是一种标准,而是一种风格,在如今互联网界,这个风格被广泛用于微服务系统之间的交互。

REST简单介绍

REST(Representional State Transfer)直译为表现层状态转换。针对REST和RESTful的介绍,觉得这篇博客写的不错,可以参看一下REST,RESTful介绍.

其实总结起来也就几句话,rest设计规范为通过url表示接口名,HTTP请求方式来区分请求类型。同时前端根据HTTP状态响应码做相应的处理。

HTTP的动作
HTTP存在创建,修改,访问,删除。这几种操作。

rest风格的url一般不会出现动词,区分动作的任务已经交给了HTTP协议了。

关于rest风格有一些建议:

1、一般不应该在URI中存在动词

2、不要在URI中加入版本号

3、建议参数超过5个,通过JSON请求传递参数

之前在总结spring mvc的时候简单总结过@RequestMapping让URL映射到对应的控制器,不过为了更好的支持REST风格的开发,spring之后还提供了@GetMapping,@PostMapping,@PutMapping,@PatchMapping,@DeleteMapping

通过@RequestMapping、@GetMapping等注解可以定位到指定的控制器方法上,通过注解@PathVariable就能够将URI地址参数获取,通过@ResponseBody可以将请求体为json的数据转换为负责的java对象。下面开始进行实例说明,这里只举例POS和GET请求对应的rest请求。

REST请求实例
 

package com.learn.chapter11.controller;
 
import com.learn.chapter11.domain.User;
import com.learn.chapter11.enumeration.SexEnum;
import com.learn.chapter11.service.UserService;
import com.learn.chapter11.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * autor:liman
 * mobilNo:15528212893
 * mail:657271181@qq.com
 * comment:
 */
@Controller
public class UserController {
 
    @Autowired
    private UserService userService;
 
    @GetMapping("/index")
    public String index() {
        System.out.println("test index");
        return "restful";
    }
 
    @PostMapping("/user")
    @ResponseBody
    public User insertUser(@RequestBody UserVo userVo) {
        User user = this.changeToPo(userVo);
        System.out.println(user.toString());
        return user;
    }
 
    @GetMapping(value = "/user/{id}")
    @ResponseBody
    public UserVo getUser(@PathVariable("id") Long id) {
        User user = new User();
        user.setNote("just test");
        user.setId(id);
        user.setUserName("liman");
        user.setSex(SexEnum.MALE);
        return changeToVo(user);
    }
 
    @GetMapping(value = "/users/{userName}/{note}/{start}/{limit}")
    @ResponseBody
    public List<UserVo> findUsers(
            @PathVariable("userName") String userName,
            @PathVariable("note") String note,
            @PathVariable("start") int start,
            @PathVariable("limit") int limit) {
        System.out.println(userName+":"+note+":"+start+":"+limit);
        List<User> userList = userService.findUsers(userName, note, start, limit);
        return this.changeToVoes(userList);
    }
 
    @PutMapping("/user/{id}")
    @ResponseBody
    public User updateUser(@PathVariable("id") Long id,@RequestBody UserVo userVo){
        User user = this.changeToPo(userVo);
        user.setId(1L);
        userService.updateUser(user);
        return user;
    }
 
    //将VO对象转换的po
    private User changeToPo(UserVo userVo) {
        User user = new User();
        user.setSex(SexEnum.getSexEnum(userVo.getSexCode()));
        user.setUserName(userVo.getUserName());
        user.setId(userVo.getId());
        user.setNote(userVo.getNote());
        return user;
    }
 
    // 转换PO变为VO
    private UserVo changeToVo(User user) {
        UserVo userVo = new UserVo();
        userVo.setId(user.getId());
        userVo.setUserName(user.getUserName());
        userVo.setSexCode(user.getSex().getCode());
        userVo.setSexName(user.getSex().getName());
        userVo.setNote(user.getNote());
        return userVo;
    }
 
    // 将PO列表转换为VO列表
    private List<UserVo> changeToVoes(List<User> poList) {
        List<UserVo> voList = new ArrayList<>();
        for (User user : poList) {
            UserVo userVo = changeToVo(user);
            voList.add(userVo);
        }
        return voList;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海兴辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值