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

聊聊@RequestBody和Json之間的關(guān)系

 更新時間:2021年06月07日 15:18:55   作者:張超帥  
這篇文章主要介紹了@RequestBody和Json之間的關(guān)系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在使用springmvc的時候,后臺@RequestBody接受的是一個json格式的字符串,一定是一個字符串。

我們可以通過@RequestBody Map

    @RequestMapping(value="/queryAccountList.do",produces="application/json;charset=UTF-8")
    @ResponseBody
    public HashMap<String, Object> queryAccountList(@RequestBody Map<String, Object> paramsMap){
        System.out.println("paramsMap="+paramsMap);
        String  channel= (String) paramsMap.get("channel");
        String function_code=(String) paramsMap.get("function_code");
        Map<String, Object> reqParam=(Map<String, Object>)paramsMap.get("data");

當(dāng)前端調(diào)用我們的接口時,傳入json字符串,就轉(zhuǎn)為了map對象。這里主要是@RequestBody的底層實現(xiàn),我們不討論。

json對象和json字符串的區(qū)別:

var person={“name”:”zhangsan”,”sex”:”男”,”age”:”24”}//json對象
var person='{“name”:”zhangsan”,”sex”:”男”,”age”:”24”}';//json字符串

json對象轉(zhuǎn)為json字符串,調(diào)用stringify方法:

var person={"name":"zhangsan","sex":"男","age":"24"};//json對象
var personString = JSON.stringify(person);
alert(personString);

SpringMVC接受json字符串類型

在SpringMVC中基于REST開發(fā)時,前端傳入后臺的應(yīng)該是一個json格式的字符串,而不是一個json對象

GET、POST方式提時, 根據(jù)request header Content-Type的值來判斷:

application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數(shù)據(jù)@RequestParam, @ModelAttribute也可以處理,當(dāng)然@RequestBody也能處理);

multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數(shù)據(jù));

其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數(shù)據(jù),必須使用@RequestBody來處理)。

@RequestBody 處理類型 和 對象 和 json相互轉(zhuǎn)換

1 @RequestBody 處理類型

在項目中經(jīng)常看到controller 中有 @RequestBody 字樣,他到底有什么作用?

一般使用表單提交數(shù)據(jù)時不需要使用@RequestBody 即可自動封裝數(shù)據(jù)到對應(yīng)的 Bean 中。@RequestBody 用來處理Content-Type: application/json, application/xml等

它是通過使用HandlerAdapter 配置的HttpMessageConverters來解析post data body,然后綁定到相應(yīng)的bean上的。

說明:使用 @RequestBody 解析數(shù)據(jù)需要添加 jackson 或 fastjson 依賴包。

maven 引入 fastjson 包

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>

2 對象 和 json 相互轉(zhuǎn)換

在項目中經(jīng)常會遇到對象和 json 之間相互轉(zhuǎn)換,公共類 和 json 對象轉(zhuǎn)換, 靜態(tài)內(nèi)部類 和 json 對象轉(zhuǎn)換

2.1 沒有內(nèi)部類時 Student 類

@Data
public class Student {
    private String id;
    private String name;
    private int age;
    private String sex;
@Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}

json 和 對象 相互轉(zhuǎn)換

public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        Student student = new Student();
        student.setName("good");
        String s = mapper.writeValueAsString(student);
        System.out.println(s);
        Student hd2 = mapper.readValue(s, Student.class);
        System.out.println(hd2);
    }

2.2 有靜態(tài)內(nèi)部類時 Student 類

@Data
public class Student {
    private String id;
    private String name;
    private int age;
    private String sex;
    private HomeData homeData;
    private BigDecimal salary;
    private String[] tel;
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
    @Data
    public static class HomeData{
        private Address address;
        @Override
        public String toString() {
            return ToStringBuilder.reflectionToString(this);
        }
        @Data
        public static class Address {
            private String country;
            private String city;
            @Override
            public String toString() {
                return ToStringBuilder.reflectionToString(this);
            }
        }
    }
}

json 和 對象 之間相互轉(zhuǎn)換

public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        Student student = new Student();
        Student.HomeData homeData = new Student.HomeData();
        Student.HomeData.Address address = new Student.HomeData.Address();
        address.setCountry("中國");
        address.setCity("上海");
        homeData.setAddress(address);
        student.setHomeData(homeData);
        String s = mapper.writeValueAsString(address);
        System.out.println(s);
        Student.HomeData.Address hd2 = mapper.readValue(s, Student.HomeData.Address.class);
        System.out.println(hd2);
    }

說明:主要方法有 mapper.writeValueAsString 和 mapper.readValue

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

相關(guān)文章

  • Java多線程編程中synchronized關(guān)鍵字的基礎(chǔ)用法講解

    Java多線程編程中synchronized關(guān)鍵字的基礎(chǔ)用法講解

    Java的synchronized關(guān)鍵字用于修飾線程同步,用以線程資源共享的目的等,下面就帶來簡單的Java多線程編程中synchronized關(guān)鍵字的基礎(chǔ)用法講解
    2016-06-06
  • 淺談Java回收對象的標(biāo)記和對象的二次標(biāo)記過程

    淺談Java回收對象的標(biāo)記和對象的二次標(biāo)記過程

    這篇文章主要介紹了淺談Java回收對象的標(biāo)記和對象的二次標(biāo)記過程的相關(guān)內(nèi)容,小編覺得還是挺不錯的,這里給大家分享一下,需要的朋友可以參考。
    2017-10-10
  • Spring Boot 文件上傳與下載的示例代碼

    Spring Boot 文件上傳與下載的示例代碼

    這篇文章主要介紹了Spring Boot 文件上傳與下載的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 基于springboot實現(xiàn)文件上傳

    基于springboot實現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了基于springboot實現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 使用Spirng Boot Admin監(jiān)控Spring Cloud應(yīng)用項目

    使用Spirng Boot Admin監(jiān)控Spring Cloud應(yīng)用項目

    這篇文章主要介紹了使用Spirng Boot Admin監(jiān)控Spring Cloud應(yīng)用項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java 設(shè)計模式以虹貓藍(lán)兔的故事講解建造者模式

    Java 設(shè)計模式以虹貓藍(lán)兔的故事講解建造者模式

    建造者模式,是一種對象構(gòu)建模式 它可以將復(fù)雜對象的建造過程抽象出來,使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對象。本文將通過示例講解建造者模式,需要的可以參考一下
    2022-04-04
  • 分享Java8中通過Stream對列表進(jìn)行去重的實現(xiàn)

    分享Java8中通過Stream對列表進(jìn)行去重的實現(xiàn)

    本文主要介紹了分享Java8中通過Stream對列表進(jìn)行去重的實現(xiàn),包括兩種方法,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Java Spring數(shù)據(jù)單元配置過程解析

    Java Spring數(shù)據(jù)單元配置過程解析

    這篇文章主要介紹了Java Spring數(shù)據(jù)單元配置過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • springboot自定義starter方法及注解實例

    springboot自定義starter方法及注解實例

    這篇文章主要為大家介紹了springboot自定義starter方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 使用Java實現(xiàn)一個解析CURL腳本小工具

    使用Java實現(xiàn)一個解析CURL腳本小工具

    文章介紹了如何使用Java實現(xiàn)一個解析CURL腳本的工具,該工具可以將CURL腳本中的Header解析為KV Map結(jié)構(gòu),獲取URL路徑、請求類型,解析URL參數(shù)列表和Body請求體,感興趣的小伙伴跟著小編一起來看看吧
    2025-02-02

最新評論

东安县| 河曲县| 宁波市| 石林| 隆安县| 敦化市| 财经| 通化市| 巴青县| 获嘉县| 建宁县| 吴江市| 延吉市| 巴林右旗| 华宁县| 长海县| 常熟市| 繁昌县| 牡丹江市| 应城市| 佳木斯市| 宝清县| 锡林郭勒盟| 周至县| 昌吉市| 新宁县| 泉州市| 曲麻莱县| 定日县| 谢通门县| 长顺县| 博罗县| 木兰县| 疏勒县| 安达市| 台州市| 呼图壁县| 商水县| 阜阳市| 边坝县| 抚顺县|