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

Spring Boot中SuspendResumeRequest请求字段映射为null求助

问题:Spring Boot REST请求部分字段映射为null

我在开发Spring Boot应用时,向REST端点发送SuspendResumeRequest对象并期望映射为Java对象,但请求到达控制器后,除了transactionId和transactionDateTime之外的所有字段都为null,求排查原因。


发送端代码

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<SuspendResumeRequest> request = new HttpEntity<>(suspendResumeRequestMsg, headers);
String apiUrl = ".....";
log.trace("Request sent to prvsite: " + request);
responseEntity = restTemplate.postForEntity(apiUrl, request, SuspendResumeResponse.class);

发送前日志

Request sent to prvsite: <SuspendResumeRequest(san=DSS30211473, reasonCd=I57, esn=1000035990, type=suspend, protocolId=null, newEsn=null, caseId=null, allowSwap=null, transactionId=EH15874174, transactionDateTime=2025-02-15T06:03:30.646Z),[Content-Type:"application/json"]>

接收端控制器方法

public ResponseEntity<SuspendResumeResponse> suspendResumeSiteOperation(@RequestBody SuspendResumeRequest suspendResumeRequest) throws Exception, JsonProcessingException {
  String method = "suspendResumeSiteOperation()";
        log.trace(method + "start controller" + suspendResumeRequest);
}

接收端日志

suspendResumeSiteOperation()start controllerSuspendResumeRequest(san=null, reasonCd=null, esn=null, type=null, protocolId=null, newEsn=null, caseId=null, allowSwap=null, transactionId=EH68151313, transactionDateTime=2025-02-15T06:47:24.353Z)

实体类代码

package com.localproject.springboot_sample.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class SuspendResumeRequest {
    @JsonProperty("san")
    private String san;

    @JsonProperty("reasonCd")
    private String reasonCd;

    @JsonProperty("esn")
    private String esn;

    @JsonProperty("type")
    private String type;

    @JsonProperty("protocolId")
    private String protocolId;

    @JsonProperty("newEsn")
    private String newEsn;

    @JsonProperty("caseId")
    private String caseId;

    @JsonProperty("allowSwap")
    private String allowSwap;

    @JsonProperty("transactionId")
    private String transactionId;

    @JsonProperty("transactionDateTime")
    private String transactionDateTime;

    public String getSan() {
        return san;
    }

    public void setSan(String san) {
        this.san = san;
    }

    public String getReasonCd() {
        return reasonCd;
    }

    public void setReasonCd(String reasonCd) {
        this.reasonCd = reasonCd;
    }

    public String getEsn() {
        return esn;
    }

    public void setEsn(String esn) {
        this.esn = esn;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getProtocolId() {
        return protocolId;
    }

    public void setProtocolId(String protocolId) {
        this.protocolId = protocolId;
    }

    public String getNewEsn() {
        return newEsn;
    }

    public void setNewEsn(String newEsn) {
        this.newEsn = newEsn;
    }

    public String getCaseId() {
        return caseId;
    }

    public void setCaseId(String caseId) {
        this.caseId = caseId;
    }

    public String getAllowSwap() {
        return allowSwap;
    }

    public void setAllowSwap(String allowSwap) {
        this.allowSwap = allowSwap;
    }

    public String getTransactionId() {
        return transactionId;
    }

    public void setTransactionId(String transactionId) {
        this.transactionId = transactionId;
    }

    public String getTransactionDateTime() {
        return transactionDateTime;
    }

    public void setTransactionDateTime(String transactionDateTime) {
        this.transactionDateTime = transactionDateTime;
    }
}

排查方向

  • 验证实际发送的JSON内容:当前日志打印的是对象toString()结果,并非真实JSON payload。建议用Jackson序列化对象后打印,确认字段名和值是否正确:
    ObjectMapper mapper = new ObjectMapper();
    log.trace("Actual JSON payload: {}", mapper.writeValueAsString(suspendResumeRequestMsg));
    
  • 检查Jackson全局配置:确认接收端是否有自定义命名策略(比如驼峰转下划线),导致字段映射不匹配。
  • 确认字段访问权限:虽然实体类有getter/setter,可尝试将字段改为public,或检查@JsonProperty注解是否正确绑定JSON字段名。
  • 抓包验证请求内容:用抓包工具查看实际发送的请求体,确认Content-Type为application/json且JSON字段与实体类注解一致。
  • 核对两端实体类版本:确保接收端使用的SuspendResumeRequest类与发送端完全一致,无字段拼写错误或注解差异。

内容的提问来源于stack exchange,提问作者ABHISHEK KUMAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:40:55