最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springmvc接口接收參數(shù)與請求參數(shù)格式的整理

 更新時間:2021年11月15日 11:29:30   作者:滴丶學(xué)生卡  
這篇文章主要介紹了springmvc接口接收參數(shù)與請求參數(shù)格式的整理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

springmvc接口接收參數(shù)與請求參數(shù)格式

前言: 相信大家在剛開始接觸接口定義與調(diào)用時遇到過接口接收不到請求參數(shù)的問題,本人也一樣,使用springmvc去定義接口或調(diào)用第三方http接口時或多或少會搞混;下面咱們一起來整理下接口定義和請求參數(shù)格式的關(guān)系。

一、首先我們需要認識下http請求中的Content-Type

我們常用的有以下幾種:

1、application/x-www-form-urlencoded; charset=UTF-8,瀏覽器的原生 form 表單,提交的數(shù)據(jù)按照 key1=val1&key2=val2 的方式進行編碼,key和value都進行了URL轉(zhuǎn)碼。

2、multipart/form-data:使用表單上傳文件時,必須設(shè)置 form 的 enctyped 屬性。

3、application/json; charset=utf-8,請求參數(shù)是序列化后的json格式字符串,方便提交復(fù)雜結(jié)構(gòu)的數(shù)據(jù),特別適合RESTful 的接口。

二、注解@RequestParam(value=“id”)

1、常用來處理地址欄傳參和表單提交的參數(shù)綁定,Content-Type為application/x-www-form-urlencoded編碼的內(nèi)容,提交方式GET、POST

2、如果用java發(fā)送http請求,需采用key、value傳參方式發(fā)送數(shù)據(jù),如下寫法:

    public static String post(HttpClient httpClient, String url, Map<String, String> params,
            Map<String, String> headers) throws ClientProtocolException, IOException {
        logger.info("Ready Post Request Url[{}]", url);
        HttpPost post = new HttpPost(url);
        setHttpHeaders(post, headers);
        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            nameValuePairList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
        }
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8);
        post.setEntity(entity);
        HttpResponse response = httpClient.execute(post);
        if (null == response || response.getStatusLine() == null) {
            logger.info("Post Request For Url[{}] is not ok. Response is null", url);
            return null;
        } else if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
            logger.info("Post Request For Url[{}] is not ok. Response Status Code is {}", url,
                    response.getStatusLine().getStatusCode());
            return null;
        }
        return EntityUtils.toString(response.getEntity());
    }

三、注解@RequestBody

1、一般用來接收json格式數(shù)據(jù),后端直接定義好請求參數(shù)的bean,Content-Type為application/json; charset=utf-8,使用示例:

@RequestBody User user

請求參數(shù):

{
    "id": 1,
    "userName": "bryant",
    "password": "123456",
    "name": "kobe",
    "Date": "1990-02-27"
}

2、使用java發(fā)送請求代碼示例:

    public static String post(HttpClient httpClient, String url, String content, Map<String, String> headers)
            throws ClientProtocolException, IOException {
        logger.info("Ready Post Request Url[{}]", url);
        url = url.replaceAll(" ", "%20");
        HttpPost post = new HttpPost(url);
        setHttpHeaders(post, headers);
        StringEntity entity = new StringEntity(content, Constants.CHARSET_UTF8);
        post.setEntity(entity);
        HttpResponse response = httpClient.execute(post);
        if (null == response || response.getStatusLine() == null) {
            logger.info("Post Request For Url[{}] is not ok. Response is null", url);
            return null;
        } else if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
            logger.info("Post Request For Url[{}] is not ok. Response Status Code is {}", url,
                    response.getStatusLine().getStatusCode());
            return null;
        }
        return EntityUtils.toString(response.getEntity(), "utf-8");
    }
    public static void main(String[] args) throws IOException {
        Map<String, Object> map = new HashMap<>();
        map.put("empId", "1");
        map.put("empName", "測試用戶");
        map.put("empEmail", "test@qq.com");
        Map<String, String> head = new HashMap<>();
        // 一定要設(shè)置參數(shù)格式
        head.put("Content-Type", "application/json;charset=UTF-8");
        System.out.println(HttpCaller.post(HttpClients.createDefault(), "http://localhost:8080/user/add",
                JsonUtil.toJson(map), head));
    }

3、如果使用postman調(diào)試接口,需要設(shè)置傳參方式為raw-JSON,如下圖:

在這里插入圖片描述

springmvc接口接受前端傳遞參數(shù)數(shù)據(jù)類型總結(jié)

一、springMVC中controller參數(shù)是自動注入

在springMVC中,controller中方法的參數(shù)是自動注入的,在使用注解的方式下,通常有:

  • @RequestParam:取querystring當(dāng)中的參數(shù)
  • @PathVariable:取 在@RequestMapping中定義的占位符中的參數(shù)(/test/{id})
  • @RequestBody:取request 這個消息體 (可以組裝json對象)

在不使用注解的情況下,默認有一些對象可以自動注入如:

  • HttpServletRequest
  • HttpServletResponse
  • MultipartFile
  • MultipartRequest

除此之外不使用注解的情況下,也可以接受前臺傳入的querystring中的參數(shù)。

二、 接受前端傳遞的對象

1、從querystring中的參數(shù)中獲取

@RequestParam:接受對象類型(Integer、String、Boolean等基本數(shù)據(jù)類型),不能接收自定義類型。

不帶注解:接受基本數(shù)據(jù)類型,若接收類型為自定義類型,會組裝參數(shù)中與自定義類型屬性名和類型相符的參數(shù)。

這種方式總結(jié):

(1).獲取自定義類型的對象時,不使用注解即可以獲取

(2).在組裝對象時可以使用以被獲取過的參數(shù)

注意:$.ajax contenType是appliation/json的時候,在后臺用spring mvc的@Requestparam注解接收參數(shù),始終接收不到。因為@RequestParam 底層是通過request.getParameter方式獲得參數(shù)的,也就是說,@RequestParam 和 request.getParameter是同一回事。

所以@RequestParam可以處理get 方式中queryString的值,也可以處理post方式中 body data的值。@RequestParam用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容(及表單內(nèi)容數(shù)據(jù)),提交方式GET、POST。

2、從請求體(body)中獲?。矮@取對象數(shù)據(jù))

當(dāng)請求體中是一段json數(shù)據(jù)時,@RequestBody會解析該json字符串并將其注入指定的自定義類型中。

通過@RequestBody的方式可以接收以json數(shù)據(jù)傳輸?shù)膶ο螅疤崾钦埱蟮腃ontent-Type必須為application/json,并且引入了jackson-databind包

注意:

1.@RequestBody該注解常用來處理Content-Type: 不是application/x-www-form-urlencoded編碼的內(nèi)容,例如application/json, application/xml等;

2.@RequestBody接收的是一個Json對象的字符串,而不是一個Json對象。在ajax請求往往傳的都是Json對象,用 JSON.stringify(data)的方式就能將對象變成字符串。

3.不使用@RequestBody注解時,可以接收Content-Type為application/x-www-form-urlencoded類型的請求所提交的數(shù)據(jù),數(shù)據(jù)格式:aaa=111b b b = 222 。 f o r m 表 單 提 交 以 及 j Q u e r y 的 bbb=222。form表單提交以及jQuery的bbb=222。form表單提交以及jQuery的.post()方法所發(fā)送的請求就是這種類型。例如后臺接口接收數(shù)據(jù)的對象前不加@RequestBody修飾。

3、接收前端傳遞的數(shù)組

接收數(shù)組可以使用注解方式的@RequestParam、@RequestBody或者無注解的方式,也可以同時使用他們?nèi)齻€

在接受數(shù)組時,默認按照方法的參數(shù)名來映射請求的參數(shù),目前很多前端框架喜歡傳遞數(shù)組時在請求參數(shù)后面加上"[]",所以使用@RequestParam時可以規(guī)定value使之對應(yīng)如@RequestParam(“ids[]”) Integer[] ids。

三、小結(jié)一下

由上可知道,后臺需要處理什么數(shù)據(jù),或者需要前臺需要傳遞什么類型的數(shù)據(jù)時,我們既可以根據(jù)這些特性來判斷,而不會導(dǎo)致有時contentType不一致,甚至不知道自己需要前端傳什么樣類型的數(shù)據(jù)格式等等。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA打開項目所有東西都在報紅報錯的解決方案

    IDEA打開項目所有東西都在報紅報錯的解決方案

    這篇文章主要給大家介紹了關(guān)于IDEA打開項目所有東西都在報紅報錯的三個解決方案,文中通過圖文介紹的非常詳細,對大家學(xué)習(xí)或者使用idea具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-06-06
  • Java 進制轉(zhuǎn)換的方法

    Java 進制轉(zhuǎn)換的方法

    這篇文章介紹了Java 進制轉(zhuǎn)換的方法,有需要的朋友可以參考一下
    2013-09-09
  • Mybatis-plus動態(tài)條件查詢QueryWrapper的使用案例

    Mybatis-plus動態(tài)條件查詢QueryWrapper的使用案例

    mybatis-plus框架功能很強大,把很多功能都集成了,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus動態(tài)條件查詢QueryWrapper的使用教程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • JAVA中的構(gòu)造函數(shù)(方法)

    JAVA中的構(gòu)造函數(shù)(方法)

    這篇文章主要介紹了JAVA中的構(gòu)造函數(shù)(方法),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • java中@requestMappling注解的使用

    java中@requestMappling注解的使用

    本文主要介紹了java中@requestMappling注解的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • java后臺接受到圖片后保存方法

    java后臺接受到圖片后保存方法

    在本篇文章里小編給大家整理了關(guān)于java后臺接受到圖片后怎么保存的相關(guān)知識點,需要的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • Mybatis深度整合Mysql的Json字段問題

    Mybatis深度整合Mysql的Json字段問題

    這篇文章主要介紹了Mybatis深度整合Mysql的Json字段問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java編寫擲骰子游戲

    Java編寫擲骰子游戲

    這篇文章主要介紹了Java編寫擲骰子游戲,需要的朋友可以參考下
    2015-11-11
  • Maven之分析剔除無用的jar引用問題

    Maven之分析剔除無用的jar引用問題

    這篇文章主要介紹了Maven之分析剔除無用的jar引用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java優(yōu)化if-else代碼的實戰(zhàn)記錄

    Java優(yōu)化if-else代碼的實戰(zhàn)記錄

    開發(fā)中經(jīng)常會根據(jù)不同的參數(shù)判斷走不同的邏輯業(yè)務(wù),我們常用的方法就是if/else嵌套使用,導(dǎo)致每增加一個需求就加一個if,慢慢的就會發(fā)現(xiàn)自己寫的代碼中出現(xiàn)了大量的if/else,這篇文章主要給大家介紹了關(guān)于Java優(yōu)化if-else代碼的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評論

无极县| 绵阳市| 临清市| 五河县| 洛隆县| 博野县| 木兰县| 内丘县| 隆德县| 申扎县| 永平县| 广汉市| 澳门| 横山县| 阿拉善盟| 滁州市| 德保县| 盐山县| 舟山市| 西吉县| 海伦市| 襄樊市| 富川| 乡城县| 曲沃县| 开远市| 浑源县| 枣庄市| 防城港市| 洱源县| 夏邑县| 麻阳| 石狮市| 桑植县| 友谊县| 泽普县| 祁连县| 胶南市| 汕头市| 平潭县| 波密县|