Restful &controller层的简化

补充知识:

一、REST简介

 REST还有一个问题就是:

如访问地址 http://localhost/user 既可以表示为保存用户的路径,又可以表示添加用户信息的路径,也就是说:一个REST风格描述的资源访问路径可以代表几个不同的访问数据库资源信息的路径

因此、我们应该怎么精确的区分到底访问的是哪个路径下的资源呢:使用行为动作(请求方式)区分

二、restful入门

思路也就如下所示: 

其实也就下面要点:

设置http请求动作(也就是:method是post请求还是get还是......)

路径参数{id}

@PathVariable注解

总体代码如下所示:

ServletContainersInitConfig:

SpringMvcConfig:

 UserController:

package com.itheima.controller;

import com.itheima.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
public class UserController {

    //设置当前请求方法为POST,表示REST风格中的添加操作
    @RequestMapping(value = "/users/{id}",method = RequestMethod.POST)
    @ResponseBody
    public String save(@PathVariable Integer id){
        System.out.println("user save..."+id);
        return "{'module':'user save'}";
    }

    //设置当前请求方法为DELETE,表示REST风格中的删除操作
    //@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
    @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
    @ResponseBody
    public String delete(@PathVariable Integer id){
        System.out.println("user delete..." + id);
        return "{'module':'user delete'}";
    }

    //设置当前请求方法为PUT,表示REST风格中的修改操作
    @RequestMapping(value = "/users",method = RequestMethod.PUT)
    @ResponseBody
    public String update(@RequestBody User user){    // @RequestBody注解:接收前端JSON数据
                                                     //格式的注解(看JSON那边的笔记)
        System.out.println("user update..."+user);
        return "{'module':'user update'}";
    }

    //设置当前请求方法为GET,表示REST风格中的查询操作
    //@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
    @RequestMapping(value = "/users/{id}" ,method = RequestMethod.GET)
    @ResponseBody
    public String getById(@PathVariable Integer id){
        System.out.println("user getById..."+id);
        return "{'module':'user getById'}";
    }

    //设置当前请求方法为GET,表示REST风格中的查询操作
    @RequestMapping(value = "/users",method = RequestMethod.GET)
    @ResponseBody
    public String getAll(){
        System.out.println("user getAll...");
        return "{'module':'user getAll'}";
    }

}

前端用REST风格进行访问后端路径下的资源(就拿delete为例):

 

三、restful快速开发(简化)

简化1:下面的代码有什么特点:

        路径/books要重复的写,实际开发中会比较麻烦

 因此我们在springmvc处理客户端请求的时候就处理过该重复问题:把/books路径直接提出取来,如下所示:

简化2:把重复的/books路径简化之后,分析下面代码还有什么特点:

        @ResponseBody 返回体的注解也要每个方法都要写,也是比较麻烦的,因此也可以把该注解提到类上面

 简化后:(注意:如果用这种简化方式,那么就要保证每个方法都有响应给前端的返回值,因为该@ResponseBody注解就是响应给前端返回值数据的注解

简化3:简化下面所示的注解(把两个注解合成一个注解,功能还是相同的)

 用@RestController注解简化该两个注解

 简化4:简化method动作:

然后就可以让前端进行路径请求了(以delete为例子):

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值