- 如果使用Spring,可以通过@RequestBody将请求体的json转换为Java对象,但如果URI相同,而请求体的内容不同,应该怎么办?
- 问题来源(stackoverflow):
- Spring @RequestBody without using a pojo?
- 稍微研究了一下,如果将@RequestBody指定为Map,那么请求体(键、值)会存储到Map对象中
- 案例:
- 发送POST请求,虽然URI相同,但是请求体却不同
- 不过,携带了一个名为type的共同数据,并通过type的值来判别不同的情况
- 这次准备了两个type的值:concert和trip
- 控制器的实现:
- 在控制器的实现中,指定 @RequestBody 为 Map<String, Object> 类型
- 通过指定 Map,可以将请求体以键值对的形式存储
- 查看 type 键的值,以此判断是哪一种类型的请求,并将请求转换为相应的类
- 在转换过程中使用了 Jackson 的 ObjectMapper 类进行转换
- 这里,我们将其转换为相应类的对象,输出到标准输出并结束
- 尝试发送 concert 的请求
- 结果的标准输出
- 尝试发送 trip 的请求
- 结果的标准输出
- 所以正确地将其转换为对应的类是可能的
- 整体代码: