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

SpringMVC @RequestBody屬性名大寫(xiě)字母注入失敗的解決

 更新時(shí)間:2023年04月10日 14:51:35   作者:風(fēng)喃海北  
這篇文章主要介紹了SpringMVC @RequestBody屬性名大寫(xiě)字母注入失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@RequestBody屬性名大寫(xiě)字母注入失敗

問(wèn)題描述

我現(xiàn)在有一個(gè)接口通過(guò)一個(gè)實(shí)體去接收一系列的參數(shù),前端傳參為一個(gè)JSON字符串,但是當(dāng)我的屬性名以大寫(xiě)字母開(kāi)頭,或者第二個(gè)字母是大寫(xiě)字母的時(shí)候,我發(fā)現(xiàn)后端接收不到參數(shù)值。

User實(shí)體:

import lombok.Data;

@Data
public class User{
?? ?private Long id;
?? ?private Integer pId;
?? ?private String Name;
?? ?//getter,setter由lombok自動(dòng)生成
?? ?//setId, setPId, setName
?? ?//getId, getPId, getName
}

前端傳參:

{
? ? "id": 1,
? ? "pId": 70,
? ? "Name": "Jack"
}

接口:

?? ?@PostMapping("/add")
?? ?public void add(@RequestBody User user) {
?? ??? ?System.out.println(user.getId()); // 1
?? ??? ?System.out.println(user.getName());//null
?? ??? ?System.out.println(user.getPId()); // null
?? ?}

問(wèn)題分析

Name接收不到的原因是JavaBean的規(guī)范不允許出現(xiàn)這樣的屬性名,即首字母為大寫(xiě)的屬性名(如:Name, URL, SuV…),這種屬性名直接忽略不注入。

解決辦法是:在屬性上面添加注解@JsonProperty(value = “Name”)顯式指定名稱的對(duì)應(yīng)關(guān)系;

pId接收不到的原因是JavaBean的規(guī)范說(shuō)如果第一個(gè)字母是小寫(xiě),第二個(gè)字母大寫(xiě)的情況(如:pId, sUV…),在生成setter/getter的時(shí)候直接在前面加上set/get,比如pId的setter/getter是setpId()/getpId(),所以 pId在注入的時(shí)候會(huì)尋找setpId()方法,而不是setPId()。

所以解決方案是:1.在屬性上面加注解@JsonProperty(value = “pId”),2.不使用lombok, 手動(dòng)寫(xiě)setter -> setpId()

總結(jié):以上兩種類型名稱注入失敗的原因都是因?yàn)镴ackson(Spring使用的JSON處理工具)遵守了JavaBean的規(guī)范導(dǎo)致的,Jackson給的方案就是通過(guò)@JsonProperty顯式指定名稱的對(duì)應(yīng)關(guān)系。

解決方案

import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty;

@Data
public class User{
?? ?private Long id;
?? ?
?? ?@JsonProperty(value = "pId")
?? ?private Integer pId;
?? ?
?? ?@JsonProperty(value = "Name")
?? ?private String Name;
?? ?//getter,setter由lombok自動(dòng)生成
?? ?//setId, setPId, setName
?? ?//getId, getPId, getName
}
import com.fasterxml.jackson.annotation.JsonProperty;

public class User{
?? ?private Long id;
?? ?private Integer pId;
?? ?
?? ?@JsonProperty(value = "Name")
?? ?private String Name;

?? ?public void setpId(){
?? ??? ?//...
?? ?}
?? ?public Integer getpId(){
?? ??? ?//...
?? ?}
?? ?//other setters,getters
?? ?//...
}

@RequestBody時(shí)第二個(gè)字母大寫(xiě),映射不到

記錄一下遇到的一個(gè)問(wèn)題, 賊難受

controller

	/**
     * 添加
     *
     * @param requestNavigationTagVO
     * @return
     */
    @PostMapping("/add")
    public JsonData add(@RequestBody RequestNavigationTagVO requestNavigationTagVO) {
        navigationTagService.add(requestNavigationTagVO);
        return JsonData.ok();
    }

RequestNavigationTagVO

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class RequestNavigationTagVO {
    /**
     * id
     */
    private Long id;

    /**
     * 所屬導(dǎo)航id
     */
    @NotNull(groups = {AddNavigationTag.class, ModifyNavigationTag.class}, message = "所屬導(dǎo)航id不能為空")
    private Long pId;

    /**
     * 標(biāo)簽名稱
     */
    @NotBlank(groups = {AddNavigationTag.class, ModifyNavigationTag.class}, message = "標(biāo)簽名稱不能為空")
    private String name;

    /**
     * 排序
     */
    @NotNull(groups = {AddNavigationTag.class, ModifyNavigationTag.class}, message = "排序不能為空")
    private Integer sort;
}

postman調(diào)接口

{
	"pId": 654577072911111,
	"name":"中餐",
	"sort":1
}

這是日志拿到的數(shù)據(jù),

日志

可以看到拿不到pId數(shù)據(jù)(p_id的駝峰寫(xiě)法),

原因: 這里使用的@Data注解(省去了get和set方法)

 public Long getPId() {
        ...
    }

 public void setPId(Long PId) {
     ...
 }

而javaBean的規(guī)范導(dǎo)致json傳參首字母大寫(xiě)將永遠(yuǎn)獲取不到

解決辦法

1,不去使用首字目大寫(xiě)或第二個(gè)字母大寫(xiě)的參數(shù)

2,自己生成get和set方法

3,使用@JsonProperty注解

 @JsonProperty("pId")
 private Long pId;

總結(jié)

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

相關(guān)文章

  • 使用maven依賴詳解

    使用maven依賴詳解

    本文主要介紹了Maven的基礎(chǔ)知識(shí),包括Maven的簡(jiǎn)介、倉(cāng)庫(kù)類型、常用命令、場(chǎng)景舉例、指令總結(jié)、依賴范圍、settings.xml說(shuō)明等,同時(shí),還詳細(xì)講解了Maven依賴的傳遞、手動(dòng)聲明optional、沖突解決等概念
    2025-02-02
  • java整合onlyoffice的各種踩坑記錄

    java整合onlyoffice的各種踩坑記錄

    這篇文章主要給大家介紹了關(guān)于java整合onlyoffice的各種踩坑,OnlyOffice是一種強(qiáng)大的在線協(xié)作軟件,專為企業(yè)和個(gè)人設(shè)計(jì),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • java 如何查看jar包加載順序

    java 如何查看jar包加載順序

    這篇文章主要介紹了java 如何查看jar包加載順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot如何使用@Value取配置文件中的map配置

    SpringBoot如何使用@Value取配置文件中的map配置

    這篇文章主要介紹了SpringBoot如何使用@Value取配置文件中的map配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Spring Cloud Gateway 如何修改HTTP響應(yīng)信息

    Spring Cloud Gateway 如何修改HTTP響應(yīng)信息

    這篇文章主要介紹了Spring Cloud Gateway 修改HTTP響應(yīng)信息的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中獲取時(shí)間戳的三種方式對(duì)比實(shí)現(xiàn)

    Java中獲取時(shí)間戳的三種方式對(duì)比實(shí)現(xiàn)

    這篇文章主要介紹了Java中獲取時(shí)間戳的三種方式對(duì)比實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java使用Socket實(shí)現(xiàn)文件上傳功能

    java使用Socket實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了java使用Socket實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 解讀@Transactional失效的幾種情況

    解讀@Transactional失效的幾種情況

    這篇文章主要介紹了@Transactional失效的幾種情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • mybatis一直加載xml,找到錯(cuò)誤的解決方案

    mybatis一直加載xml,找到錯(cuò)誤的解決方案

    這篇文章主要介紹了mybatis一直加載xml,找到錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • JAVA實(shí)現(xiàn)用戶抽獎(jiǎng)功能(附完整代碼)

    JAVA實(shí)現(xiàn)用戶抽獎(jiǎng)功能(附完整代碼)

    這篇文章主要給大家介紹了關(guān)于JAVA實(shí)現(xiàn)用戶抽獎(jiǎng)功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

弥勒县| 孝感市| 江油市| 博野县| 阳曲县| 石柱| 陇南市| 乌鲁木齐市| 塔城市| 酒泉市| 志丹县| 雷州市| 林州市| 榆树市| 韩城市| 上高县| 阜康市| 定陶县| 广平县| 廉江市| 屯留县| 老河口市| 建宁县| 固原市| 罗山县| 关岭| 光泽县| 榕江县| 抚松县| 福泉市| 霍林郭勒市| 潞城市| 汤阴县| 斗六市| 绥棱县| 邵武市| 陆河县| 三台县| 民乐县| 洞头县| 雷山县|