当前位置: 首页 > 面试题库 >

Spring @RequestBody包含不同类型的列表(但接口相同)

壤驷坚
2023-03-14
问题内容

假设我有一个域类:

    public class Zoo{
        private List<Animal> animals;
        ....

其中Animal是具有不同实现(Cat,Dog)的接口。假设我希望能够保存Zoo对象:

    @RequestMapping(value = "/zoo", method = RequestMethod.POST)
    public @ResponseBody void save(@RequestBody Zoo zoo) {
    ....

我想发送一个json-类似:

    {
        animals:[
            {type:'Cat', whiskers-length:'3'},
            {type:'Dog', name:'Fancy'}
        ]
    }

我如何告诉Spring MVC在type ==’Cat’时将动物映射到Cat类型,在type ==’Dog’时将其映射到Dog类?


问题答案:

您应该使用Jackson注释@JsonTypeInfo@JsonSubTypes实现多态json。注释在Animal基类上。

@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = Dog.class, name = "Dog"),
        @JsonSubTypes.Type(value = Cat.class, name = "Cat")})
public abstract class Animal {

}


 类似资料:
  • 假设我有一个域类: 其中动物是具有不同实现的接口(猫、狗)。假设我希望能够保存一个动物园对象:

  • 问题内容: 假设我有一个域类: 其中Animal是具有不同实现(Cat,Dog)的接口。假设我希望能够保存Zoo对象: 我想发送一个json-类似: 我如何告诉Spring MVC在type ==’Cat’时将动物映射到Cat类型,并在type ==’Dog’时将其映射到Dog类? 问题答案: 你应该使用Jackson注释并实现多态json。注释在基类上。

  • 问题内容: 考虑以下示例: 失败并出现以下错误 为什么呢 生成的方法没有重叠。事实上,这实际上意味着 那里没有重叠。那为什么会失败呢? 如果您想知道我在做什么,并且有更好的解决方案:我有一堆Event和Listener接口,它们几乎与上述类完全一样。我想创建一个适配器和一个适配器接口,为此,我需要使用特定事件扩展所有Listener接口。这可能吗?有一个更好的方法吗? 问题答案: 不,你不能。这是

  • 这个问题是关于接口与实现该接口的类之间的关系。我看不出这个或这个如何回答这个问题。 我创建了一个接口和一个抽象泛型类,它实现了该接口。然后创建两个具体的类和。然后创建了一个元素列表,这些元素使用一个值和一个值扩展了。到目前为止还不错。 现在我要分配扩展为。我的期望是,这应该是有效的,因为无论什么扩展也实现。但编译器不允许我。这是一个错误: 我可以复印一下名单: 用于创建一个值,如果类型为。但赋值报

  • 因此,我正在创建一个用户API,并尝试在登录前调用getUserByEmail()。我的问题是,我得到了一个不明确的处理程序方法映射为HTTP路径错误。 我知道我的问题与我有一个相同但参数类型不同的GET有关。任何帮助都将不胜感激!

  • 问题内容: 我在这里已经读到,在Java中,具有相同名称但不同类型的两个变量可以在同一范围内共存。我的意思是这个 但是所有的Java IDE都不允许这样的代码。我想知道这样的代码在语法上是否正确,或者只是IDE不允许这样的代码防止歧义。 无论如何,这是网站的摘录 “如果幸运的话,您也许能够重新编译Jad的输出。 但是,Java VM对于变量命名的规则比Java语言本身更为宽松。例如,一个有效的类文