四.SpringBoot2.X项目:在线教育网站

目录

4.1 架构搭建

4.2 SpringBoot2.X开发HTTP接口GET请求

1.GET请求

2.注解

3.编辑一个简单的视频列表接口

 4.3 SpringBoot2.X统一接口返回协议(开发规范)

 4.4 SpringBoot2.X开发HTTP接口POST请求

  1.POST请求

  2.编辑一个简单的账号密码提交登录接口,form表单形式

4.5 使用RequestBody对象提交数组

运行及结果:

 4.6 SpringBoot2.X中定制JSON字段


4.1 架构搭建

  •   创建项目
  •   配置启动类
  • 创建对应的包,先建立以下几个包,后面需要的再补充:

controller、service、dao、domain、utils...

  • 初始化数据开发

  • controller:存放控制器;
  • mapper: (dao层)返回层;
  • service:存放接口和对应的实现类;
  • impl:为了解耦;
  • domain:存放实体类;
  • utils:存放工具类;

4.2 SpringBoot2.X开发HTTP接口GET请求

1.GET请求

  •  场景:一般的查询接口用的就是get请求;
  • 注解:@GetMapping = @RequestMapping(method = RequestMethod.GET)

2.注解

  •   @GetMapping = @RequestMapping(method = RequestMethod.GET)
  •   @PostMapping = @RequestMapping(method = RequestMethod.POST)
  •   @PutMapping = @RequestMapping(method = RequestMethod.PUT)
  •   @DelecteMapping = @RequestMapping(method = RequestMethod.DELETE)

3.编辑一个简单的视频列表接口

    1.video类

/**
 * 视频类
 * */

public class Video implements Serializable {

    private int id;

    private String title; //标题

    private String summary; //简介

    private int price;

    private String coverImg;  //封面

    private Date createTime;  //创建时间

    public Video(){}

    public Video(int id, String title) {
        this.id = id;
        this.title = title;
        this.createTime = new Date();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getCoverImg() {
        return coverImg;
    }

    public void setCoverImg(String coverImg) {
        this.coverImg = coverImg;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "Video{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", summary='" + summary + '\'' +
                ", price=" + price +
                ", coverImg='" + coverImg + '\'' +
                ", createTime=" + createTime +
                '}';
    }
}
2.VideoMapper类
@Repository
public class VideoMapper {

    private static Map<Integer, Video> videoMap = new HashMap<>();

    static {
        videoMap.put(1,new Video(1,"Rick and Morty s1"));
        videoMap.put(2,new Video(2,"Rick and Morty s2"));
        videoMap.put(3,new Video(3,"Rick and Morty s3"));
        videoMap.put(4,new Video(4,"Rick and Morty s4"));
        videoMap.put(5,new Video(5,"Rick and Morty s5"));
    }

    public List<Video> listVideo(){
        List<Video> list = new ArrayList<>();

        list.addAll(videoMap.values());

        return list;
     }
     
}

3.VideoService类

 public interface VideoService {

    public List<Video> listVideo();
}
4.VideoServiceImpl类
@Service
public class VideoServiceImpl implements VideoService {

    @Autowired
    private VideoMapper videoMapper;

    @Override
    public List<Video> listVideo() {
        return videoMapper.listVideo();
    }
}
5.VedioController类
/**
 * 视频控制器
 * */

@RestController
@RequestMapping("/api/v1/vedio")
public class VedioController {

    @Autowired
    private VideoService videoService;

//    @RequestMapping(value = "list",method = RequestMethod.GET)
    @GetMapping("list")
    public Object list(){
        List<Video> list = videoService.listVideo();
        return list;
    }
}

注:

  •    注意加注解;
  •    跑程序之前注意端口占用

结果:

 4.3 SpringBoot2.X统一接口返回协议(开发规范)

  •   上述代码存在的问题:协议未统一,缺少业务状态码;
  •   JSONData工具类开发

JsonData类

public class JsonData {

    private int code;

    private Object data;

    private String Msg;

    public JsonData() {
    }

    public JsonData(int code, Object data) {
        this.code = code;
        this.data = data;
    }

    public JsonData(int code, Object data, String msg) {
        this.code = code;
        this.data = data;
        this.Msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getMsg() {
        return Msg;
    }

    public void setMsg(String msg) {
        Msg = msg;
    }

    public static JsonData buildSuccess(Object data){
          return new JsonData(0,data,"success");
    }

    public static JsonData buildFail(String msg){
        return new JsonData(-1,"",msg);
    }

    public static JsonData buildError(String msg,int code){
        return new JsonData(code,"",msg);
    }

}

运行结果:

 4.4 SpringBoot2.X开发HTTP接口POST请求

  1.POST请求

  •  场景:表单提交,如果不用细分PUT/DELETE方法,都可以使用POST;
  •  注解:@PostMapping = @RequestMapping(method = RequestMethod.POST)

  2.编辑一个简单的账号密码提交登录接口,form表单形式

    注:添加公开和私人两种状态;

   情境1:

  @PostMapping("login")
    public JsonData login(String username, String pwd) {
        System.out.println("user=" + username + "pwd=" + pwd);
        
        String token = userService.login(username, pwd);

        return token == null ? JsonData.buildFail("用户名密码错误") : 
               JsonData.buildSuccess(token);
    }

  情境2:

@PostMapping("login")
    public JsonData login(User user) {
        String token = userService.login(user.getUsername(), user.getPwd());
        return token == null ? JsonData.buildFail("用户名密码错误") : 
               JsonData.buildSuccess(token);
    }

 情境3:

 @PostMapping("login")
    public JsonData login(@RequestBody User user) {
        String token = userService.login(user.getUsername(), user.getPwd());
        return token == null ? JsonData.buildFail("用户名密码错误") : 
               JsonData.buildSuccess(token);
    }

4.5 使用RequestBody对象提交数组

 新增章集类Chapter:

public class Chapter {

    private int id;

    private int videoId;

    private String title;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getVideoId() {
        return videoId;
    }

    public void setVideoId(int videoId) {
        this.videoId = videoId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Chapter{" +
                "id=" + id +
                ", videoId=" + videoId +
                ", title='" + title + '\'' +
                '}';
    }
}

修改Video类,新增章集列表字段:
 

public class Video implements Serializable {

    private int id;

    private String title; //标题

    private String summary; //简介

    private int price;

    private String coverImg;  //封面

    private Date createTime;  //创建时间

    private List<Chapter> listChapter;

    public Video(){}

    public Video(int id, String title) {
        this.id = id;
        this.title = title;
        this.createTime = new Date();
    }

    public Video(int id, String title, List<Chapter> listChapter) {
        this.id = id;
        this.title = title;
        this.listChapter = listChapter;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getCoverImg() {
        return coverImg;
    }

    public void setCoverImg(String coverImg) {
        this.coverImg = coverImg;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public List<Chapter> getListChapter() {
        return listChapter;
    }

    public void setListChapter(List<Chapter> listChapter) {
        this.listChapter = listChapter;
    }


    @Override
    public String toString() {
        return "Video{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", summary='" + summary + '\'' +
                ", price=" + price +
                ", coverImg='" + coverImg + '\'' +
                ", createTime=" + createTime +
                ", listChapter=" + listChapter +
                '}';
    }
}

修改VideoController类,新增Chapter上传入口:

    //上传章集列表
    @PostMapping("save_chapter_list")
    public Object listChapter(@RequestBody Video video){

        System.out.println(video.toString());

        return JsonData.buildSuccess("");
    }

运行及结果:

 4.6 SpringBoot2.X中定制JSON字段

1.SpringBoot配置Jackson处理字段

  •   常用框架:阿里fastjson,谷歌gson等;
  • JavaBean序列化为json:

          1.性能:Jackson > FastJson > Gson > Json-lib 同个结构

          2.Jackson、FastJson、Gson类库各有优点,各有自己的专长;

          3.空间换时间,时间换空间;

  • jackson处理相关注解:

          1.指定字符不返回:@JsonIgnore;

            2.制定日期格式:

               @JsonFormat(pattern="yyyy-mm-dd  hh:mm:ss",locale="zh",timezone="GMT+8")

            3.空字段不返回:@JsonnInclude(Include.NON_NULL)

            4.指定别名:@JsonProperty

运行结果
  • 序列化操作 
//序列化
String jsonStr = objectMapper.writeValueAsString(list);
System.out.println(jsonStr);
return JsonData.buildSuccess(list);
//反序列化
List<Video> temp = objectMapper.readValue(jsonStr,List.class);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值