欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC开发Restful API 参数收集方式

程序员文章站 2024-02-29 12:36:16
...

目录

1、Restful API 简单说明

一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答。

Rest:表述性状态转移

SpringMVC开发Restful API 参数收集方式
Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词,用HTTP协议里的动词来实现资源的添加,修改,删除等操作。即通过HTTP动词来实现资源的状态扭转:

GET 用来获取资源,
POST 用来新建资源(也可以用于更新资源),
PUT 用来更新资源,
DELETE 用来删除资源。

2、收集参数问题

在设计Restful API时,很多时候需要以不同的方式收集参数,比如登陆、更新账户等操作,下面着重讨论在不同的请求方式下,参数收集的问题,原则上前后端使用json作为数据交换格式。(用到:SpringMVC、JQuery,AJAX,JSP)

测试按钮书写形式:

<input id="button3" value="testJson" type="button"/>

2.1RequestMethod.GET

get方式请求中,默认的参数提交方式是在url上体现,get请求是获取服务器端的数据,不建议提交复杂数据类型,如果涉及到多个数据或者复杂数据类型,需要换成post方式,下面是get请求的例子:
http://localhost:8080/api/user?userName=kent&userId=1

后台书写方式:

  @RequestMapping(value = "/login",method = RequestMethod.GET)
    public JsonResult login(@RequestParam("mydata") String data){
        System.out.println(data);
        return new SuccessResult().setData(data);
}

其中JsonResult以及SuccessResult是自定义的数据结构,以方便前后台使用Json进行交互,@RequestParam是为了接收请求参数所用的标注,value用于当变量名与请求参数名不一致时,指定请求参数名。

请求URL示例:http://localhost:9999/login?mydata=hello
前台书写方式:

$("#button3").click(function () {

       var mydata = "mydata=hello";
       var url = "/login";
         $.ajax({
             url : url,
             type : 'GET',
             data : mydata
         });
    });

其中请求数据以字符串的形式拼接而成,这时后台收集到的参数为 hello

2.2RequestMethod.POST

在此类请求中,参数可以封装到实体类中,后台接收数据时,框架会自动将数据解析并映射到JavaBean上,post请求方式是将前端客户录入的数据提交到后台进行处理,数据安全。

后台书写方式

@RequestMapping(value = "/login",method = RequestMethod.POST)
    public JsonResult login(@RequestBody Address address){
        System.out.println(address);
        return new SuccessResult();
    }

前台书写方式:

 $("#button3").click(function () {
       var url = "/login";
       var address = {};
         address['id'] = 1;
         address['province'] = "maopp";
         address['city'] = "hihihi";
         $.ajax({
             url : url,
             type : 'POST',
             contentType: "application/json;charset=utf-8",
             data : JSON.stringify(address)
         });
    });

前台规范化参数时有两点需要注意,一个是content-type,默认的内容类型application/x-www-form-urlencoded,如果想提交数据到服务器端,需要指定内容类型为application/json,否则服务器端接收到的为null;第二点是将数据格式化为Json格式,使用JSON.strinify()函数。

2.3RequestMethod.PUT

用于更新资源,参数提交方式与post类似
后台书写方式:

@RequestMapping(value = "/login",method = RequestMethod.PUT)
    public JsonResult login(@RequestBody Address address){
        System.out.println(address);
        return new SuccessResult();
    }

前端书写方式:

 $("#button3").click(function () {

       var url = "/login";

       var address = {};

         address['id'] = 1;

         address['province'] = "maopp";

         address['city'] = "hihihi";

         $.ajax({

             url : url,

             type : 'PUT',

             contentType: "application/json;charset=utf-8",

             data : JSON.stringify(address)

         });

    });

2.4RequestMethod.DELETE

用于删除资源或者注销账号等操作,可以通过在url上提交参数,也可以提交Json形式的参数,多数情况下只要传入一个Integer类型的数据即可(比如删除用户只需要提交用户id)

后台书写形式:

@RequestMapping(value = "/deleteUser/{id}",method = RequestMethod.DELETE
)
public JsonResult logout(@PathVariable Integer id){
        //注销session
        userService.deleteById(id);
    }

使用@PathVariable 注解,支持从请求的url上拿到数据,需要注意的是url上面的参数名需要和方法中的变量名保持一致。