Spring Boot中如何从JSON请求体中直接提取指定字段的value值
问题原因说明
你当前的写法中,用String类型承接@RequestBody参数时,Spring MVC会把整个请求体的JSON字符串直接赋值给这个参数,不会做结构解析,所以拿到的是完整的JSON结构串,而非单独的userId值。
可选解决方案
方案1:自定义DTO类接收(最推荐)
定义简单的请求映射类,Spring会自动完成JSON到对象的序列化,直接取属性值即可。
// 自定义请求参数映射类 public class LogoutRequest { private String userId; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } }
修改接口参数定义:
@PostMapping(value="/logout",consumes = "application/json") public void logout(@RequestBody LogoutRequest request){ ordersService.logout(request.getUserId()); }
方案2:用Map接收(适合参数少不想新建类的场景)
无需额外定义实体类,直接用Map承接JSON结构,通过key取对应value即可。
@PostMapping(value="/logout",consumes = "application/json") public void logout(@RequestBody Map<String, String> requestMap){ String userId = requestMap.get("userId"); ordersService.logout(userId); }
方案3:手动解析JSON字符串(不推荐,仅作兼容参考)
如果不想修改原有接口的参数类型,可借助JSON解析工具手动从拿到的完整JSON串中提取值,以下是Spring默认自带的Jackson库的实现示例:
@Autowired private ObjectMapper objectMapper; @PostMapping(value="/logout",consumes = "application/json") public void logout(@RequestBody String jsonStr) throws Exception { String userId = objectMapper.readTree(jsonStr).get("userId").asText(); ordersService.logout(userId); }
内容的提问来源于stack exchange,提问作者Oya
相关产品推荐
相关产品推荐

