java - 每个端点的自定义杰克逊解串器
问题描述
我想知道是否有一种方法可以自定义每个方法的 Jackson Deserializer:
@PostMapping("/first")
public void firstMethod(@RequestBody User user)
{
...
}
@PostMapping("/second")
public void secondMethod(@RequestBody User user)
{
...
}
在每个端点中,都需要一个 User 类。如果我理解正确,如果 HTTP 请求发送到带有数据的端点,Jackson 解析器将调用具有相应名称的设置器到正文数据中的属性,并尝试将所有内容设置为 1:1。如何更改每个端点的设置方式。
例如,在 firstMethod() 中,数据体以一种方式映射到 User 类,而在 secondMethod() 中,数据体以另一种方式映射到 User 类:
const data = {first: 1, second: 2, third: 3}
firstMethod 将创建一个用户
{something: 1, something2: 2, something3: 3}
secondMethod 将创建一个用户:
{something: 3, something2: 1, something3: 2}
举个例子。
解决方案
您可以HttpServletRequest
手动注入并映射数据:
@Autowired
ObjectMapper objectMapper;
@PostMapping
public void foo(@RequestBody User user, HttpServletRequest request) {
JsonNode json = objectMapper.readTree(request.getReader());
// use JsonNode object to parse / map the data however you want
}
但我建议你应该问自己一个问题:为什么?
如果同一个 Java 类有两种不同的 JSON 表示,则可能应该使用两个不同的 Java DTO 类。
推荐阅读
- xaml - 选择子项时 UWP XAML 更改 ListView 的背景
- generics - 如何在重试之前使超时运算符在 RxJava2(RxJava3)链中触发一次异常
- hibernate - Spring Data JPA 在更新语句上嵌套 SELECT 不起作用
- python - Flask 消息闪烁
- flutter - 为什么在颤振中从回调返回后会更新不同的地图实例?
- jsxgraph - 使用 jsxgraph 的 setjessiecode
- android - 如何从存储在 Cloud FireStore firebase 中的 URL 获取文件扩展名
- c# - 如何在gridview中创建启用禁用文本框
- python - 使用 Python 处理 \n vs ^M\n 换行符
- javascript - 无法在我的应用程序中集成 firebase 通知(javascript / angular)