【发布时间】:2014-08-29 04:40:15
【问题描述】:
Jackson 框架提供了基于注解的方法来在序列化过程中发出类型信息。
我不想在我的超类(Animal)中使用@JsonSubTypes 注释。
相反,我想告诉我的子类,即 Dog 和 Elephant Animal 是它们的父类。
有没有什么方法可以在 Animal 类中不使用注解。
如果是,请尽可能提供示例。
以下是我正在尝试解决的情况。“test”接收到的 JSON 包含“type”字段为“dog”或“elephant”。
我想将这两个类注册为“Animal”类的子类型,但不想在 Animal 中使用 @JsonSubTypes。
任何帮助将不胜感激。 提前致谢。
@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
abstract class Animal(){
private String sound;
private String type;
//getters and setters
}
@JsonTypeName("dog")
Class Dog extends Animal(){
//some attributes.
//getters and setters
}
@JsonTypeName("elephant")
Class Elephant extends Animal(){
//some attributes.
//getters and setters
}
@Controller
public class MyController {
//REST service
@RequestMapping( value = "test")
public @ResponseBody String save(@RequestBody Animal animal){
System.out.println(animal.getClass());
return success;
}
}
【问题讨论】:
-
您可以通过调用 objectMapper.registerSubtypes(Dog.class, Elephant.class) 方法注册您的子类型。是你要找的吗?
-
谢谢Alexey。请你举个例子来支持你的回答。
-
我尝试了 objectMapper.registerSubtypes(Dog.class, Elephant.class) 但它没有用。
-
我包含了 ObjectMapper mapper = new ObjectMapper(); mapper.registerSubtypes(Dog.class,Elephant.class);在 MyController 类的“保存”方法(REST 服务)中。
标签: java json spring-mvc jackson