springmvc——restful支持

1 什么是Restful

资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个 URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要获取这个资源,访问它的 URI 就可以,因此 URI 即为每一个资源的独一无二的识别符。
表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层 (Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。
状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器, 必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “ 表现层状态转化” 。具体说, 就是 HTTP 协议里面,四个表示操作方式的动词:GET 、POST 、PUT 、DELETE 。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。

示例

/account/1 HTTP GET : 得到 id = 1 的 account
/account/1 HTTP DELETE: 删除 id = 1 的 account
/account/1 HTTP PUT: 更新 id = 1 的 account

2 SpringMVC对RESTful的支持

  • @PathVariable:可以解析出来URL中的模板变量,例如{id}
  • 设置@RequestMapping的method属性设置,可以将同一个url映射到不同的handlerMethod上
  • 直接使用@GetMapping、@PostMapping、@PutMapping、@DeleteMapping等同与@ResquestMapping+Method方法设置

3 Demo

3.1 准备工作

因为我前后台交互数据采用的json格式,需要导入fastJson依赖,注册json消息转换器
两个与前台交互的json对象

//lombok注解,省略了set和get
@Data
public class JAccount {
    String id;
    boolean status;
    public JAccount(String id, boolean status) {
        this.id = id;
        this.status = status;
    }
}
@Data
public class JId {
    String id;
    public JId(String id) {
        this.id = id;
    }
}

3.2RestfulController

测试post,delete,put

@Controller
public class RestfulController {
    Logger logger = Logger.getLogger(RestfulController.class);

    @PostMapping(value = "accout")
    @ResponseBody
    public JId post(@RequestBody JAccount jAccount ){
        return new JId(jAccount.getId());
    }

    @DeleteMapping(value = "accout/{id}")
    @ResponseBody
    public void deleteAccout(@PathVariable String id){
        logger.info("delete id:"+id);
    }

    @PutMapping(value = "accout/{id}/{status}")
    @ResponseBody
    public JAccount updateAccout(@PathVariable String id,@PathVariable boolean status){
        return new JAccount(id,status);
    }

}

3.3 hello.jsp

需要导入jquery

   <div>
        <button onclick="restPost()">Restful Post</button>
        <script type="text/javascript">
            function restPost(){
                $.ajax({
                    type:"post",
                    url:'${pageContext.request.contextPath }/accout',
                    data:'{id:"restPost",status:1}',
                    contentType:"application/json;charset=utf-8",
                    dataType:"json",
                    success:function(result){
                        alert("id:"+result.id);
                    }
                });
            }
        </script>
    </div>

    <p></p>
    <div>
        <button onclick="restDelete()">restful delete</button>
        <script type="text/javascript">
            function restDelete(){
                $.ajax({
                    type:"delete",
                    url:'${pageContext.request.contextPath }/accout/111',
                    success:function(){
                        alert("delete success !");
                    }
                });
            }
        </script>
    </div>


    <p></p>
    <div>
        <button onclick="restPut()">restful Put</button>
        <script type="text/javascript">
            function restPut(){
                var id ="restPut";
                var status=1;
                $.ajax({
                    type:"put",
                    url:'${pageContext.request.contextPath }/accout/'+id+"/"+status,
                    dataType:"json",
                    success:function(result){
                        alert("name:"+result.id+"\n status:"+result.status);
                    }
                });
            }
        </script>
    </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值