gpt4 book ai didi

java - JSON 到 Java 映射参数/通用类型

转载 作者:行者123 更新时间:2023-11-29 03:29:31 25 4
gpt4 key购买 nike

我正在寻找有关处理以下情况的最佳实践的建议。

给定一个接受 JSON 请求的基于 Java 的 Web API,我们需要将 JSON 对象映射到 Java。这个问题是关于Java对象是参数类型的情况。对于我的特殊情况,我使用 Spring 和 MappingJacksonHttpMessageConverter 来进行映射。

示例 REST 服务

@RequestMapping(method = RequestMethod.POST) 
public void updateContainer(@RequestBody Container<?> container) {
realService.updateContainer(container);
}

示例参数类型

public class Container<T extends ContainerItem> {
private T containerItem;
...
}

当我调用这个方法时,我会得到一个 400 错误(错误的请求),因为 Container 的类型在运行时被删除并且 Jackson 不知道如何映射我的 containerItem(因为它不知道要映射到什么类型) .

我实现了一个非常基本的解决方案,我在 JSON 数据中添加了一个字段,它指定了 containerItem 的 Java 类名,然后添加了一个自定义的 HttpMessageConverter,它使用这个类名来构造一个参数化的 JavaType,然后 Jackson ObjectMapper 可以用来做映射,但我想知道是否有人有更好的方法来处理这个问题?

最佳答案

一种解决方案是声明一个参数类型,并以这种方式将其用作 @RequestBody 的目标:

public class MyCustomTypeContainer extends Container<SubContainerItem>  {
..
}

public void updateContainer(@RequestBody MyCustomTypeContainer container) {
realService.updateContainer(container);
}

请注意,MyCustomTypeContainer 必须是参数类型(完全实现的泛型类型)。这可能意味着您可能必须为每个 containerItem 类型创建一个子类型。

参见 here沿着同样的思路提出另一个问题。

关于java - JSON 到 Java 映射参数/通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19084618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com