国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

json傳參到j(luò)ava接口部分參數(shù)接收不到

這篇具有很好參考價(jià)值的文章主要介紹了json傳參到j(luò)ava接口部分參數(shù)接收不到。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、問題描述:

使用postman傳參時(shí),接口參數(shù)中有部分參數(shù)被傳遞進(jìn)了接口內(nèi)部,還有部分參數(shù)沒有接收到,如下圖:第一張圖是postman接口參數(shù),第二張圖是接收到的參數(shù)
圖一:
json傳參到j(luò)ava接口部分參數(shù)接收不到
圖二:
json傳參到j(luò)ava接口部分參數(shù)接收不到

二、問題解決:

這個(gè)問題其實(shí)解決很簡(jiǎn)單,就是json數(shù)據(jù)轉(zhuǎn)化為實(shí)體的過程,找尋get、set方法失敗,導(dǎo)致數(shù)據(jù)無法正常從json映射到實(shí)體,從而出現(xiàn)的問題。解決起來兩個(gè)方法,第一種就是改變量名,這種不建議使用,改動(dòng)量較大,需要將DTO、VO等都需要更改,有的甚至還需要?jiǎng)觭ql,第二種就是加個(gè)注解即可,告訴實(shí)體把某個(gè)json值就給當(dāng)前的屬性就行,比如上面例子我們可以給pOrgCode這個(gè)屬性加如下的注解:

    @JsonProperty(value = "pOrgCode")
    String pOrgCode;

這里的注解是com.fasterxml.jackson.annotation.JsonProperty這個(gè)包下面的注解。

三、問題原因

變量名的前兩個(gè)字母出現(xiàn)了大寫
下面一起探討下,這個(gè)過程是如何失敗的,失敗的具體點(diǎn)又是什么
其實(shí)根本原因還是在get、set方法和屬性的命名上,下面pojo的代碼

@RequiredArgsConstructor
@Data
class DataDTO{

    String pOrgCode;
    String name;
    String uName;
    String isTrue;
    String Lname;
    String NAme;

}

可以看到代碼沒有什么特別的,上面的@Data是lombok的注解,可以省去我們寫get、set、toString等方法。
下面再看下真正編譯后的文件是什么樣吧,如下:

class DataDTO {
    String pOrgCode;
    String name;
    String uName;
    String isTrue;
    String Lname;
    String HOme;

    public DataDTO() {
    }

    public String getPOrgCode() {
        return this.pOrgCode;
    }

    public String getName() {
        return this.name;
    }

    public String getUName() {
        return this.uName;
    }

    public String getIsTrue() {
        return this.isTrue;
    }

    public String getLname() {
        return this.Lname;
    }

    public String getHOme() {
        return this.HOme;
    }

    public void setPOrgCode(String pOrgCode) {
        this.pOrgCode = pOrgCode;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setUName(String uName) {
        this.uName = uName;
    }

    public void setIsTrue(String isTrue) {
        this.isTrue = isTrue;
    }

    public void setLname(String Lname) {
        this.Lname = Lname;
    }

    public void setHOme(String HOme) {
        this.HOme = HOme;
    }

    //此處省略無關(guān)方法若干
}

從上面的編輯結(jié)果我們可以看到兩種情況:

1.首字母小寫就是將首字母進(jìn)行大寫其然后前面拼接get、set
2.首字母大寫則保持不變前面拼接get、set

下面看下這種場(chǎng)景下后臺(tái)接收到的參數(shù)展示:
json傳參到j(luò)ava接口部分參數(shù)接收不到
通過上面圖片可以看出,只要前兩個(gè)字母出現(xiàn)了大寫字母,那么lombok生產(chǎn)的get、set方法是找尋不到真正的屬性的,所以json轉(zhuǎn)化實(shí)體就出了過程。
下面筆者又嘗試了使用idea自動(dòng)生成get、set方法,經(jīng)實(shí)現(xiàn),產(chǎn)生的get、set等如下:

class DataDTO {
    String pOrgCode;
    String name;
    String uName;
    String isTrue;
    String Lname;
    String HOme;

    public String getpOrgCode() {
        return this.pOrgCode;
    }

    public void setpOrgCode(String pOrgCode) {
        this.pOrgCode = pOrgCode;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getuName() {
        return this.uName;
    }

    public void setuName(String uName) {
        this.uName = uName;
    }

    public String getIsTrue() {
        return this.isTrue;
    }

    public void setIsTrue(String isTrue) {
        this.isTrue = isTrue;
    }

    public String getLname() {
        return this.Lname;
    }

    public void setLname(String lname) {
        this.Lname = lname;
    }

    public String getHOme() {
        return this.HOme;
    }

    public void setHOme(String HOme) {
        this.HOme = HOme;
    }

    public DataDTO() {
    }
    //此處省略無關(guān)方法
}

從生產(chǎn)的get、set方法上看,這兩種生產(chǎn)略有差別,但是值得注意的是使用idea生成的get、set一樣也接收不到數(shù)據(jù),如下圖
json傳參到j(luò)ava接口部分參數(shù)接收不到
比對(duì)發(fā)現(xiàn),其實(shí)并不是lombok多不好用,這種場(chǎng)景下我們使用idea其實(shí)也是一樣的結(jié)果。

四、使用postman請(qǐng)求接口會(huì)出這種問題,那接口和接口之前的調(diào)用會(huì)不會(huì)有這種問題?

上面這個(gè)問題是需要分場(chǎng)景的

1.http調(diào)用場(chǎng)景

答案是:部分是部分否,也就是說http調(diào)用就會(huì)有上述我們碰到的問題,但是只要一部分字段有這總問題,postman其實(shí)就是模仿http客戶端發(fā)出請(qǐng)求調(diào)用接口的。

@RestController
@RequestMapping("/org")
public class TestController {
    @PostMapping("/test2")
    public void testJson(@RequestBody DataDTO dataDTO){
        System.out.println(dataDTO.toString());
        System.out.println(dataDTO.toString());

    }

    @PostMapping("/test")
    public void testJson2(@RequestBody DataDTO dataDTO){
        HttpClientUtil httpClientUtil = new HttpClientUtil();
        dataDTO = new DataDTO();
        dataDTO.setpOrgCode("666");
        dataDTO.setHOme("555");
        dataDTO.setIsTrue("444");
        dataDTO.setLname("333");
        dataDTO.setName("222");
        dataDTO.setuName("111");

        Map<String,String> headMap = new HashMap<>();
        headMap.put("Content-type","application/json;charset=UTF-8");
        String s = httpClientUtil.doPost("http://localhost:8888/org/test2", headMap, JSONObject.toJSON(dataDTO).toString());
        System.out.println("調(diào)用結(jié)束");

    }
}

如上代碼,從新包了一個(gè)接口用于調(diào)用原接口,接口調(diào)用使用http方式來調(diào)用,這樣原接口的輸出結(jié)果如下所示:
json傳參到j(luò)ava接口部分參數(shù)接收不到
然后我們發(fā)現(xiàn)除了前兩個(gè)字母都是大寫的場(chǎng)景下會(huì)出問題,其他都是ok的,所以這種問題其實(shí)也算是工具的問題。

2.RPC調(diào)用場(chǎng)景

若是RPC調(diào)用傳遞還是JSON結(jié)論則和HttpClient調(diào)用沒啥區(qū)別了,若是傳遞實(shí)體則不用有這種問題了。

五、總結(jié)

出現(xiàn)這個(gè)問題的原因是使用postman調(diào)用接口傳遞json解析失敗造成的,后面使用httpclient驗(yàn)證,只有在前兩個(gè)字母均是大寫的場(chǎng)景下,使用httpclient才會(huì)出問題,正常情況下postman會(huì)出問題的場(chǎng)景,httpclient并沒有,所以平時(shí)代碼還是放心寫就是,當(dāng)然為了以防萬一我們一定不要寫這種代碼(屬性前兩個(gè)字母出現(xiàn)大寫),若是非要這么寫也要加個(gè)注釋:JsonPropertity(value=“filedName”)。文章來源地址http://www.zghlxwxcb.cn/news/detail-409913.html

到了這里,關(guān)于json傳參到j(luò)ava接口部分參數(shù)接收不到的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于Java的接口自動(dòng)化傳參是json格式,如何轉(zhuǎn)義

    廢話少說,直接貼剛新鮮完成的源碼; 框架是Java+springboot+mybatisplus+testng+jenkins+git

    2024年01月19日
    瀏覽(15)
  • vue3路由跳轉(zhuǎn)params傳參接收不到?

    vue3路由跳轉(zhuǎn)params傳參接收不到?

    一、之前的用法 這樣路由可以跳轉(zhuǎn)過去,但接收到了params是一個(gè)空對(duì)象。 二、解決方法 通過查找資料,發(fā)現(xiàn)了原因。 https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 由于之前的params傳參在頁面刷新之后,參數(shù)會(huì)丟失,所以vue將這種方法移除了。 vue推薦的路

    2024年02月12日
    瀏覽(25)
  • vue3路由跳轉(zhuǎn)params傳參接收不到

    vue3路由跳轉(zhuǎn)params傳參接收不到

    這樣路由可以跳轉(zhuǎn)過去,但接收到了params是一個(gè)空對(duì)象 原因:由于之前的params傳參在頁面刷新之后,參數(shù)會(huì)丟失,所以vue將這種方法移除了。 vue推薦的路由跳轉(zhuǎn)傳參方法: 1.使用query傳遞參數(shù) 2.使用vuex、pinia對(duì)參數(shù)進(jìn)行存儲(chǔ) 3.使用 History API 方式傳遞和接收

    2024年02月09日
    瀏覽(22)
  • Java文件導(dǎo)入接口多參數(shù)寫法 (POST方法同時(shí)支持接收文件流和其他參數(shù))

    Java文件導(dǎo)入接口多參數(shù)寫法 (POST方法同時(shí)支持接收文件流和其他參數(shù))

    使用表單方式進(jìn)行傳輸,需要注意其他參數(shù)需要使用 @RequestPart 注解進(jìn)行接收,因?yàn)樵?post 方法中表單傳輸使用@RequestParam 接收 json 格式默認(rèn)視為字符串類型,接口無法映射對(duì)應(yīng)實(shí)體類 @RequestParam 依賴Converter or PropertyEditor進(jìn)行數(shù)據(jù)解析, @RequestPart參考’Content-Type’ header,依賴

    2024年02月16日
    瀏覽(32)
  • 小程序wx.navigateToMiniProgram跳轉(zhuǎn)傳參和接收參數(shù)

    小程序wx.navigateToMiniProgram跳轉(zhuǎn)傳參和接收參數(shù)

    小程序wx.navigateToMiniProgram跳轉(zhuǎn)傳參和接收參數(shù) 看了好多沒有具體的步驟,自己寫一下 傳參 wx.navigateToMiniProgram({ appId: \\\'\\\', path: \\\'page/index/index?id=123\\\', extraData: { foo: \\\'bar\\\' }, envVersion: \\\'develop\\\', success(res) { // 打開成功 } }) 對(duì)應(yīng)小程序接收參數(shù) 需要在app.js App.onLaunch , App.onShow 中接收,數(shù)

    2024年02月09日
    瀏覽(27)
  • uniapp webview交互以及h5傳參到app

    app端,onPostMessage在nvue頁面下接受參數(shù),message在vue頁面下接受參數(shù) 鏈接后拼接傳參,只在一開始能傳 方法傳參 H5端,我這是用vue2寫的 在index.html頁面加上這個(gè) 在首頁接受參數(shù) 往APP傳參 接受APP的方法傳參,變量跟data里面的變量綁定

    2024年02月16日
    瀏覽(30)
  • 【C語言】函數(shù)調(diào)用及創(chuàng)建,并將數(shù)組傳參到函數(shù)

    【C語言】函數(shù)調(diào)用及創(chuàng)建,并將數(shù)組傳參到函數(shù)

    ? ???歲月失語唯石能言的個(gè)人主頁? ? ? ?? ?? 個(gè)人欄專: 秒懂C語言 ? 若在許我少年時(shí),一兩黃金一兩風(fēng) ? ?? 目錄 前言 一、函數(shù)的概念 二、庫函數(shù) 2.1 標(biāo)準(zhǔn)庫和頭文件 2.2庫函數(shù)的使用方法 2.2.1功能 2.2.2庫函數(shù)的頭文件 2.2.3例子 2.2.4庫函數(shù)文檔的一般格式 三、自定義

    2024年02月04日
    瀏覽(23)
  • docker build --build-arg 傳參到 Dockerfile

    docker build 命令用于使用 Dockerfile 創(chuàng)建鏡像。 語法 OPTIONS說明: –build-arg=[] :設(shè)置鏡像創(chuàng)建時(shí)的變量; –tag, -t: 鏡像的名字及標(biāo)簽,通常 name:tag 或者 name 格式;可以在一次構(gòu)建中為一個(gè)鏡像設(shè)置多個(gè)標(biāo)簽。 接下來,重點(diǎn)講一下變量設(shè)置以及傳值進(jìn) Dockerfile 。 --build-arg Dockerf

    2024年02月15日
    瀏覽(27)
  • @RequestBody接收不到前端傳遞過來的json數(shù)據(jù)

    @RequestBody接收不到前端傳遞過來的json數(shù)據(jù)

    我剛開始只是寫@RequestBody ParkingRecord parkingRecord 一直獲取的都是null, 直到用了Map標(biāo)簽才終于獲取到參數(shù)了 獲取到map的key,就可以獲取值了 有人說是前后端參數(shù)名稱不一致:在實(shí)體類的屬性上加一個(gè)注解 然而這個(gè)沒有解決我的問題 也有人說是因?yàn)閘ombok的問題,自己用idea的快捷

    2024年02月12日
    瀏覽(26)
  • postman發(fā)送json嵌套, 后端 @RequestBody 接收不到

    postman發(fā)送json嵌套, 后端 @RequestBody 接收不到

    遇到了一個(gè)很奇葩的問題,具體是這樣的: postman 通過 post 方式發(fā)送請(qǐng)求,請(qǐng)求參數(shù)是一個(gè)嵌套的json,后端是@RequestBody修飾的實(shí)體類接參的, 具體的json數(shù)據(jù): 后端: 大家知道以上事例即可。 出現(xiàn)的問題是: 發(fā)送請(qǐng)求后,沒能收到外層實(shí)體類的參數(shù),內(nèi)層的ANPR對(duì)象,一直

    2024年02月04日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包