我有一个项目a,其中我有这样一个界面:
interface MyInterface extends Serializable { }
在另一个项目B中,我有一个实现该接口的类:
@Data
class MyClass implements MyInterface {
private String someProp;
}
现在我想告诉jackson,我想将MyInterface
的所有外观反序列化为MyClass
。我知道通常可以使用JsonSubTypes
,但在这种情况下,项目A不知道项目B。
是否有可能获得类型的默认反序列化器的方法?然后我可以做这样的事情:
SimpleModule module = new SimpleModule();
module.addDeserializer(MyInterface.class, DefaultDeserializerForMyClass);
我知道我可以编写完全相同的自定义反序列化器,但是有更简单的方法吗?
您可以在MyClass上添加@JsonDeseriize,并使用ObjectMapper.addMixIn()作为目标。
Public ObjectMapper addMixIn(类目标,类混合源)
方法,用于添加用于增强指定类或接口的混合注释。来自milinSource的所有注释都被用来覆盖目标(或其超类型)所拥有的注释。
目标类(或接口),其注释将有效覆盖mixinSource-其注释将“添加”到目标注释中的类(或接口),必要时覆盖
例如:
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(as = MyClass.class)
class MyClass implements MyInterface
{
private String someProp;
/* getters and setters */
}
@Bean
public ObjectMapper objectMapper()
{
ObjectMapper om = new ObjectMapper();
om.addMixIn(MyInterface.class, MyClass.class);
return om;
}
@PostMapping
public String foo(@RequestBody MyInterface bar)
{
if (bar instanceof MyClass) {
MyClass baz = (MyClass)bar;
System.out.println(baz.getSomeProp());
return "world"
}
return "goodbye"
}
$ curl -X POST -d '{"someProp": "hello"}' -H "content-type: application/json" localhost:8080
world
和服务器正确打印:
hello
问题内容: 我有一个json字符串,应该将其反序列化为以下类 我该怎么做?这是通常的方式 但是我怎么提到T代表什么呢? 问题答案: 你需要为使用的每种通用类型创建一个对象,并将其用于反序列化。例如
我有一个json字符串,我应该将其反序列化为以下类 我怎么做?这是通常的方式 但我怎么说T代表什么呢?
我有一个带有几个实现类的通用接口,需要通过Json序列化和反序列化这些类。我正试图开始与Jackson合作,使用完整的数据绑定,没有太多运气。 示例代码说明了这个问题: 调用会导致以下异常: 组织。科德豪斯。杰克逊。地图JsonMappingException:未找到类测试$Success的序列化程序,也未找到创建BeanSerializer的属性(为了避免异常,请禁用SerializationC
问题内容: 我正在尝试制作一个使用Jackson来反序列化POJO的类。 看起来像这样… 我对此实施有2个问题。 首先是我将类类型传递给方法,以便对象映射器知道应反序列化的类型。有使用泛型的更好方法吗? 同样在get方法中,我将一个从objectMapper返回的对象强制转换为T。这看起来特别讨厌,因为我必须在此处强制转换T,然后还必须从调用它的方法中强制转换对象类型。 我在该项目中使用了Robo
我正在尝试将我的代码 Json 数组中的这个 元素反序列化为自定义类..但我不能: 这是类: 但是我收到此错误: com.fasterxml.jackson.databind.exc.MismatchedInputException: START_ARRAY无法从 [Source: UNKNOWN; line: -1, column: -1] at com.fasterxml.jackson.da