Postman请求体字段传JSON值并在SpringBoot控制器中解析的实现方法
Postman传递JSON数据到SpringBoot控制器实现方案
问题1:将JSON作为单个字段值传递、控制器接收为字符串
完全可以实现,操作步骤如下:
- Postman配置:
- 选择POST请求,Headers中添加
Content-Type: application/json - 请求体选择
raw->JSON格式,将需要传递的JSON内容转义双引号后作为单个字段的字符串值,示例请求体:
- 选择POST请求,Headers中添加
{ "jsonContent": "{\"username\":\"zhangsan\",\"age\":25,\"dept\":\"研发部\"}" }
- 控制器接收逻辑:
可以直接定义包含对应String类型字段的DTO类接收,也可以用Map接收参数,示例代码:
// 方式1:DTO接收 @Data public class JsonStrDTO { private String jsonContent; } @PostMapping("/receiveStr") public void receiveStr(@RequestBody JsonStrDTO dto) { String jsonStr = dto.getJsonContent(); // 后续可通过Jackson ObjectMapper或Fastjson将字符串解析为JSON对象操作 } // 方式2:Map直接接收 @PostMapping("/receiveStr") public void receiveStr(@RequestBody Map<String, Object> reqMap) { String jsonStr = (String) reqMap.get("jsonContent"); }
问题2:实体类JSONObject类型字段接收JSON数据
分两种常用的JSON库场景实现:
场景1:使用SpringBoot默认Jackson库
无需引入额外依赖,直接将字段类型定义为JsonNode即可,SpringBoot自带的消息转换器会自动完成反序列化:
- 实体类定义:
import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; @Data public class InputDTO { private JsonNode input; }
- Postman请求体写法(无需转义,直接嵌套JSON即可):
{ "input": { "username": "zhangsan", "age": 25, "roles": ["admin", "user"] } }
- 控制器代码:
@PostMapping("/receiveJson") public void receiveJson(@RequestBody InputDTO dto) { JsonNode input = dto.getInput(); // 直接调用方法取值:input.get("username").asText()、input.get("age").asInt() }
场景2:使用Fastjson库
- 首先引入Fastjson依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson2</artifactId> <version>2.0.32</version> </dependency>
- 实体类定义:
import com.alibaba.fastjson2.JSONObject; import lombok.Data; @Data public class InputDTO { private JSONObject input; }
- 配置Fastjson消息转换器(可选,部分版本默认即可识别,若反序列化失败可添加配置):
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); converters.add(0, converter); } }
- Postman请求体写法和控制器逻辑和Jackson场景完全一致,直接嵌套JSON传递即可,控制器中可直接调用
JSONObject的API操作参数。
提示:两种场景都不需要对input字段对应的JSON内容做转义,框架会自动完成反序列化映射。
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

