@JsonTypeInfo
通过遵循MixIn的用法,无论生成类的事实如何,都可以使用注释
“混合注释是”:一种将注释与类相关联的方法,而无需修改(目标)类本身。
也就是说,您可以:
定义将混合类(或接口)的注释与目标类(或接口)一起使用,以使其看起来像目标类具有混合类具有的所有注释(用于配置序列化/反序列化)
这样您就可以编写您的AnimalMixIn
课程,例如
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "_class")
@JsonSubTypes({
@Type(value = Cat.class, name = "com.example.Cat"),
@Type(value = Dog.class, name = "com.example.Dog") })
abstract class AnimalMixIn
{
}
并配置您的解串器
ObjectMapper mapper = new ObjectMapper();
mapper.getDeserializationConfig().addMixInAnnotations(
Animal.class, AnimalMixIn.class);
由于您使用的春天启动,您可以查看以下博客文章,看你如何自定义ObjectMapper使用混入,自杰克逊对象映射器,尤其要注意混入的方法Jackson2ObjectMapperBuilder
应该通过转换器设置使用ObjectMapper
内部自定义RestTemplate
,例如
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter jsonMessageConverter = new MappingJackson2HttpMessageConverter();
jsonMessageConverter.setObjectMapper(objectMapper);
messageConverters.add(jsonMessageConverter);
restTemplate.setMessageConverters(messageConverters);
return restTemplate;