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
相关产品推荐
相关产品推荐

