You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JDBC新增数据异常:RequestBody未绑定+BadSqlGrammarException

解决Spring Boot JDBC新增数据时的两个问题:@RequestBody参数接收失败与SQL语法错误

一、@RequestBody无法获取JSON参数的原因及解决

  • 请求体JSON的键采用大写蛇形命名(如FROM_VALUES),但Java实体类DisputeLog的属性通常为小驼峰命名(如fromValues),Jackson默认无法自动完成映射,导致所有属性值为null。
  • 两种解决方式任选其一:
    1. 修改请求体JSON的键为小驼峰格式:
      {
          "fromValues": "Y",
          "toValues": "Z",
          "source": "ES",
          "disputeID": "5567",
          "createdBy": "AB5W1"    
      }
      
    2. 在DisputeLog实体类的对应字段上添加@JsonProperty注解,指定JSON键名:
      public class DisputeLog {
          @JsonProperty("FROM_VALUES")
          private String fromValues;
          
          @JsonProperty("TO_VALUES")
          private String toValues;
          
          @JsonProperty("SOURCE")
          private String source;
          
          @JsonProperty("DISPUTE_ID")
          private String disputeID;
          
          @JsonProperty("CREATED_BY")
          private String createdBy;
          
          // 其他字段、getter/setter方法
      }
      

二、BadSqlGrammarException的原因及解决

  • 当前采用字符串拼接SQL的方式,不仅存在SQL注入风险,还会在参数为null时拼接出字符串'null'(而非SQL标准的NULL值),触发DB2的语法错误;同时这种写法也可能导致JDBC底层处理时出现参数索引越界异常。
  • 解决方法:使用参数化查询,调用JdbcTemplate的带参数重载方法执行SQL:
    修改服务层代码如下:
    public DisputeLog addNewDisputeLog(DisputeLog disputeLog){
        disputeLog.setCreatedAt(new Timestamp(System.currentTimeMillis()));
        String query = "INSERT INTO ENGAGE_AR_DISPUTES.DISPUTE_LOGS(FROM_VALUES, TO_VALUES, SOURCE, DISPUTE_ID, CREATED_BY) VALUES (?, ?, ?, ?, ?)";
        jdbcTemplate.update(query, 
            disputeLog.getFromValues(), 
            disputeLog.getToValues(), 
            disputeLog.getSource(), 
            disputeLog.getDisputeID(), 
            disputeLog.getCreatedBy()
        );
        return disputeLog;
    }
    
  • 参数化查询的优势:
    • 自动处理null值,插入SQL标准的NULL而非字符串'null'
    • 彻底避免SQL注入风险
    • 解决JDBC参数索引越界问题

内容的提问来源于stack exchange,提问作者Pao Beltran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:27:12