Spring Boot如何在请求体中传递嵌套Map并解析参数?
先确认你的请求体正确格式
你的请求体实际应该是如下合法JSON(去掉转义符后):
{ "logRequest": { "ObIdentifier": "B2003001A22A10A52323J02279", "notes": "Company Code could not be determined" } }
方法一:用嵌套Map接收(满足你的需求)
直接在Controller方法里用@RequestBody接收嵌套Map即可,Spring会自动帮你解析JSON结构:
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @RestController public class LogController { @PostMapping("/submit-log") public void handleLogRequest(@RequestBody Map<String, Map<String, String>> requestMap) { // 取出内层的logRequest Map Map<String, String> logRequest = requestMap.get("logRequest"); // 提取具体参数 String obId = logRequest.get("ObIdentifier"); String noteContent = logRequest.get("notes"); // 这里写你的业务逻辑 System.out.println("获取到ObIdentifier: " + obId); System.out.println("获取到备注: " + noteContent); } }
- 子Map泛型用
String是因为你的参数值都是字符串,如果有数字、布尔等其他类型,可以改成Map<String, Object>兼容更多类型。
方法二:用实体类接收(更推荐新手使用)
如果这个JSON结构是固定的,定义对应实体类会让代码更清晰,后续维护也更方便:
- 定义内层实体类
LogRequest:
public class LogRequest { private String ObIdentifier; private String notes; // 必须保留无参构造方法(Spring JSON解析需要) public LogRequest() {} // Getter和Setter方法 public String getObIdentifier() { return ObIdentifier; } public void setObIdentifier(String obIdentifier) { ObIdentifier = obIdentifier; } public String getNotes() { return notes; } public void setNotes(String notes) { this.notes = notes; } }
- 定义外层包装类
LogRequestWrapper:
public class LogRequestWrapper { private LogRequest logRequest; public LogRequestWrapper() {} public LogRequest getLogRequest() { return logRequest; } public void setLogRequest(LogRequest logRequest) { this.logRequest = logRequest; } }
- Controller中接收并使用:
@PostMapping("/submit-log") public void handleLogRequest(@RequestBody LogRequestWrapper requestWrapper) { LogRequest logRequest = requestWrapper.getLogRequest(); String obId = logRequest.getObIdentifier(); String noteContent = logRequest.getNotes(); // 业务逻辑处理 System.out.println("ObIdentifier: " + obId); System.out.println("Notes: " + noteContent); }
补充说明
Spring Boot默认使用Jackson作为JSON解析工具,只要你的实体类有无参构造方法和对应的Getter/Setter,就能自动完成JSON到Java对象的转换,不需要额外配置。
内容的提问来源于stack exchange,提问作者krishna lakshmi
相关产品推荐
相关产品推荐

