iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringMVC @RequestBody属性名大写字母注入失败如何解决
  • 784
分享到

SpringMVC @RequestBody属性名大写字母注入失败如何解决

2023-07-06 00:07:19 784人浏览 安东尼
摘要

这篇文章主要讲解了“springMVC @RequestBody属性名大写字母注入失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springmvc @Requ

这篇文章主要讲解了“springMVC @RequestBody属性名大写字母注入失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springmvc @RequestBody属性名大写字母注入失败如何解决”吧!

    @RequestBody属性名大写字母注入失败

    问题描述

    我现在有一个接口通过一个实体去接收一系列的参数,前端传参为一个JSON字符串,但是当我的属性名以大写字母开头,或者第二个字母是大写字母的时候,我发现后端接收不到参数值。

    User实体:

    import lombok.Data;@Datapublic class User{    private Long id;    private Integer pId;    private String Name;    //getter,setter由lombok自动生成    //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    }

    问题分析

    Name接收不到的原因是JavaBean的规范不允许出现这样的属性名,即首字母为大写的属性名(如:Name, URL, SuV…),这种属性名直接忽略不注入。

    解决办法是:在属性上面添加注解@jsonProperty(value = “Name”)显式指定名称的对应关系;

    pId接收不到的原因是JavaBean的规范说如果第一个字母是小写,第二个字母大写的情况(如:pId, sUV…),在生成setter/getter的时候直接在前面加上set/get,比如pId的setter/getter是setpId()/getpId(),所以 pId在注入的时候会寻找setpId()方法,而不是setPId()。

    所以解决方案是:1.在属性上面加注解@JsonProperty(value = “pId”),2.不使用lombok, 手动写setter -> setpId()

    总结:以上两种类型名称注入失败的原因都是因为Jackson(Spring使用的JSON处理工具)遵守了JavaBean的规范导致的,Jackson给的方案就是通过@JsonProperty显式指定名称的对应关系。

    解决方案

    import lombok.Data;import com.fasterxml.jackson.annotation.JsonProperty;@Datapublic class User{    private Long id;        @JsonProperty(value = "pId")    private Integer pId;        @JsonProperty(value = "Name")    private String Name;    //getter,setter由lombok自动生成    //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时第二个字母大写,映射不到

    记录一下遇到的一个问题, 贼难受

    controller

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

    RequestNavigationTagVO

    @Builder@AllArgsConstructor@NoArgsConstructor@Datapublic class RequestNavigationTagVO {        private Long id;        @NotNull(groups = {AddNavigationTag.class, ModifyNavigationTag.class}, message = "所属导航id不能为空")    private Long pId;        @NotBlank(groups = {AddNavigationTag.class, ModifyNavigationTag.class}, message = "标签名称不能为空")    private String name;        @NotNull(groups = {AddNavigationTag.class, ModifyNavigationTag.class}, message = "排序不能为空")    private Integer sort;}

    postman调接口

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

    这是日志拿到的数据,

    SpringMVC @RequestBody属性名大写字母注入失败如何解决

    可以看到拿不到pId数据(p_id的驼峰写法),

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

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

    SpringMVC @RequestBody属性名大写字母注入失败如何解决

    而javaBean的规范导致json传参首字母大写将永远获取不到

    解决办法

    1,不去使用首字目大写或第二个字母大写的参数

    2,自己生成get和set方法

    SpringMVC @RequestBody属性名大写字母注入失败如何解决

    3,使用@JsonProperty注解

     @JsonProperty("pId") private Long pId;

    感谢各位的阅读,以上就是“SpringMVC @RequestBody属性名大写字母注入失败如何解决”的内容了,经过本文的学习后,相信大家对SpringMVC @RequestBody属性名大写字母注入失败如何解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: SpringMVC @RequestBody属性名大写字母注入失败如何解决

    本文链接: https://www.lsjlt.com/news/356595.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • SpringMVC @RequestBody属性名大写字母注入失败如何解决
      这篇文章主要讲解了“SpringMVC @RequestBody属性名大写字母注入失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringMVC @Requ...
      99+
      2023-07-06
    • SpringMVC@RequestBody属性名大写字母注入失败的解决
      目录@RequestBody属性名大写字母注入失败问题描述问题分析解决方案@RequestBody时第二个字母大写,映射不到解决办法总结@RequestBody属性名大写字母注入失败...
      99+
      2023-05-15
      SpringMVC @RequestBody @RequestBody属性名 @RequestBody大写字母注入失败
    • RocketMQTemplate 注入失败如何解决
      今天就跟大家聊聊有关RocketMQTemplate 注入失败如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。RocketMQTemplate 注入失败在使用rocketmq ...
      99+
      2023-06-20
    • SpringBoot @Componet注解注入失败如何解决
      今天小编给大家分享一下SpringBoot @Componet注解注入失败如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
      99+
      2023-07-05
    • windows延缓写入失败如何解决
      这篇文章主要介绍“windows延缓写入失败如何解决”,在日常操作中,相信很多人在windows延缓写入失败如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”window...
      99+
      2023-01-29
      windows
    • zuulFilter中注入bean失败如何解决
      今天就跟大家聊聊有关zuulFilter中注入bean失败如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。zuulFilter注入bean失败一、为什么要用到这个上周想实现在网...
      99+
      2023-06-20
    • css中如何使用font-variant属性设定小型大写字母
      小编给大家分享一下css中如何使用font-variant属性设定小型大写字母,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! font-variant 属性或者设定小型大写字母。 ...
      99+
      2024-04-02
    • 电脑延缓写入失败如何解决
      这篇文章主要介绍“电脑延缓写入失败如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“电脑延缓写入失败如何解决”文章能帮助大家解决问题。方法一:使用windows自带工具修复受损文件磁盘找到电脑运...
      99+
      2023-06-27
    • MySQL生僻字插入失败如何解决
      这篇文章将为大家详细讲解有关MySQL生僻字插入失败如何解决,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下面是在虚拟机里复现的场景:step1、模拟原始表结构字符集环境...
      99+
      2024-04-02
    • php上传文件写入失败如何解决
      这篇文章主要讲解了“php上传文件写入失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php上传文件写入失败如何解决”吧!php上传文件写入失败是因为上传文件临时文件夹空间内存不够...
      99+
      2023-06-20
    • mybatis如何解决从列名到属性名的自动映射失败的问题
      本篇内容介绍了“mybatis如何解决从列名到属性名的自动映射失败的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题背景从数据库中取出...
      99+
      2023-06-20
    • thinkphp中网站缓存写入失败如何解决
      thinkphp中网站缓存写入失败如何解决,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、错误如下:2、修改Cache权限为777,如下...
      99+
      2024-04-02
    • 如何解决Spring自动注入失败的问题
      小编给大家分享一下如何解决Spring自动注入失败的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring自动注入失败如何解决?我有一个被Spring @...
      99+
      2023-06-15
    • 如何解决Laravel日志文件写入失败问题
      这篇文章将为大家详细讲解有关如何解决Laravel日志文件写入失败问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在讲这个问题之前可能需要简单介绍下Linux系统下的文件的Ownership和Permi...
      99+
      2023-06-04
    • 如何解决javaBean json传参首字母大写获取不到的问题
      本篇内容介绍了“如何解决javaBean json传参首字母大写获取不到的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!javaBean...
      99+
      2023-06-20
    • 如何解决struts2中Action名字的大小写的问题
      本篇文章给大家分享的是有关如何解决struts2中Action名字的大小写的问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言今天在使用struts框架编写Action类以...
      99+
      2023-05-31
      struts2 action ct
    • 如何解决Callable的对象中用@Autowired注入别的对象失败问题
      这篇文章给大家分享的是有关如何解决Callable的对象中用@Autowired注入别的对象失败问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现Callable的对象中,用@Autowired注入别的对象失...
      99+
      2023-06-20
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作