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

JSON,Jersey和Jackson中的多态

米楚青
2023-03-14
问题内容

Jackson with Jersey是否支持JSON上的多态类?

比方说,例如,我有一个Parent类和一个从其继承的Child类。而且,假设我要使用JSON通过HTTP发送和接收父级和子级。

public class Parent {
...
}

public class Child extends Parent {
...
}

我考虑过这种实现:

@Consumes({ "application/json" }) // This method supposed to get a parent, enhance it and return it back
    public @ResponseBody 
    Parent enhance(@RequestBody Parent parent) {
    ...
    }

问题:如果我(当然通过JSON)给此函数一个Child对象,它将起作用吗?Child的多余成员字段也将被序列化吗?基本上,我想知道这些框架是否支持多态消费和响应。

顺便说一句,我正在使用Spring MVC。


问题答案:

杰克逊确实支持多态,

在您的孩子班级中用以下名称注释:

 @JsonTypeName("Child_Class")
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "objectType")
 public class Child extends Parent{
 ....
 }

在父级中,您可以指定子类型:

@JsonSubTypes({ @JsonSubTypes.Type(value = Child.class), @JsonSubTypes.Type(value = SomeOther.class)}) 
public class Parent {
    ....
}


 类似资料:
  • 问题内容: 我想在我的静态服务中捕获json映射异常,以防输入json无效。 它抛出,但我不知道如何或在何处捕获此异常。我想捕获此异常并发送回适当的错误响应。 一切正常,但是如果json主体格式不正确,则会引发异常。我想抓住这个例外。 问题答案: 最终对我有用的是声明的提供者,例如

  • 我是法利新到杰克逊和泽西。已经做了一些使用这些库的程序。但是我有一个问题,我找不到解决方案。 这是在我的类中。我正在尝试将json从我的web应用程序发送到服务器。但是我只在尝试时得到错误。 这是我的javascript文件的样子。它确实调用了服务器。但是我不能100%确定我是否做的一切都是正确的 最后,这里是我的类的一个片段,我想让我的项目理解的是,当我从javascript应用程序发送一些东西

  • 问题内容: 编辑:现在更具体,我注意到我想在下面使用两个依赖项的冲突: 基本上,我试图忽略一个属性(@JsonIgnore),但是我的Jackson注释都没有起作用。甚至@JsonProperty。我试图在getters和setters方法中添加@JsonIgnore,但是行为相同。 我还尝试遵循官方文档,并尝试使用其他库 导入org.codehaus.jackson.annotate.JsonI

  • 我使用泽西和杰克逊访问一个REST Web服务,它正确地返回格式良好的JSON数据,但具有响应头: 内容类型:文本/html;字符集=UTF-8 即使我在请求头中指定了接受:应用程序/json,结果导致泽西抛出: org.glassfish.jersey.message.internal.MessageBodyProviderNotFound异常:找不到用于媒体类型=text/html; char

  • 问题内容: 我一直在尝试创建Jersey REST Web服务。我想从Java类接收和发出JSON对象,如下所示: 应该这样将其转换为JSON: 但是,我找不到为此的标准解决方案。似乎每个人都在实现自己的包装器 解决方案。这个要求对我来说似乎是最基本的。我不敢相信这是普遍接受的解决方案,尤其是因为Jersey确实是Java中更有趣的部分之一。 我还尝试了升级到Jackson 1.8,这仅给了我这一

  • 臣接孙氏道: 我如何使Jersey解析JSONs,以便如果eventType=1,那么stats.params变成Params1的实例,而else变成params2的实例?