当前位置: 首页 > article >正文

SpringBoot接收RequestBody数据时,参数大写接收不到数据以及解决办法

在Spring Boot应用程序中,如果你发现当请求体(RequestBody)中的参数名是大写时无法接收到数据,这可能是因为HTTP请求的Content-Type头以及Spring Boot处理JSON的方式默认情况下对属性名称的大小写敏感。

当你使用@RequestBody注解来接收一个对象时,Spring Boot会尝试将请求体中的JSON数据自动转换成对应的Java对象。如果JSON字段名称与Java类中的属性名称不匹配(包括大小写),那么这个字段就无法被正确地映射到Java对象中,从而导致该字段为null或者没有被设置。

解决这个问题的方法有几种:

  1. 修改JSON字段名称:
    如果可以控制发送请求的一方,最直接的方法是让JSON字段名称和Java类中的属性名称保持一致(包括大小写)。

  2. 使用@JsonProperty注解:
    在你的Java类中,你可以使用Jackson库提供的@JsonProperty注解来指定JSON字段名称。这样即使JSON字段名称与Java属性名称不同也能正确映射。

    import com.fasterxml.jackson.annotation.JsonProperty;
    
    public class MyRequest {
        @JsonProperty("PARAM_NAME")
        private String paramName;
        
        // getters and setters
    }
    
  3. 自定义ObjectMapper配置:
    你可以通过配置ObjectMapper实例来改变默认的行为。例如,你可以配置ObjectMapper忽略JSON字段的大小写:

    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.PropertyNamingStrategy;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class JacksonConfig {
    
        @Bean
        public ObjectMapper objectMapper() {
            ObjectMapper mapper = new ObjectMapper();
            mapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
            return mapper;
        }
    }
    

    注意:这种方法会影响整个应用的所有序列化/反序列化行为,请谨慎使用。

  4. 使用Map接收参数:
    如果你不想创建特定的POJO类,也可以直接用Map<String, Object>来接收所有请求体的数据,然后根据键值手动处理数据。

    @PostMapping("/myEndpoint")
    public ResponseEntity<?> handleRequest(@RequestBody Map<String, Object> requestBody) {
        // 使用requestBody.get("PARAM_NAME")来获取值
    }
    

请根据你的具体需求选择合适的解决方案。通常推荐使用@JsonProperty或调整JSON字段名称以保持一致性,因为这些方法更为直观且易于维护。


http://www.kler.cn/news/362087.html

相关文章:

  • Postman使用-基础篇
  • 深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制
  • MATLAB智能算法 - Immunity Algorithm免疫算法
  • 微信小程序文本收起展开
  • 在做题中学习(65):Z字形变换
  • string类的学习(上)
  • pm2 守护http-server
  • Redis Search系列 - 第二讲 同义词
  • Go 项目配置的定制化和一体化打包方案
  • 红队老子养成记4 - 不要遇到403就放弃,学会403绕过,找到别人找不到的接口!!(全网最多绕过!)
  • UG NX12.0建模入门笔记:1.0 UG NX12.0安装教程
  • 计算机视觉在疲劳检测中的应用
  • MySQLDBA修炼之道-开发篇(一)
  • webAPI中的触屏事件、轮播图、插件以及本地存储
  • 鸿蒙系统 VS 安卓系统,谁将引领未来移动操作系统?
  • 十九、Python基础语法(字典(dict))
  • Tftpd.exe源代码分析----TftpdIoPostReceiveBuffer函数分析
  • 10月22日,每日信息差
  • 基础学习-centos修改本地语言
  • 【C++】vector(1)
  • Linux中文件的读写过程
  • 制造企业数字化转型顶层规划案例(55页满分PPT)
  • Vue学习笔记(四、v-bind指令)
  • 复旦大学全球供应链研究中心揭牌,合合信息共话大数据赋能
  • VMware通过Vcenter升级Esxi
  • 人工智能技术的应用与未来展望