gpt4 book ai didi

json - @JsonTypeInfo 可以与集合一起使用吗?

转载 作者:行者123 更新时间:2023-12-01 01:26:32 24 4
gpt4 key购买 nike

使用 Spring 3 和 Jackson 1.7.6,我可以序列化抽象类的实现并将类的完全限定名称输出为名为 @class 的属性。 .当我的 Spring Controller 从用 @ResponseBody 注释的 Controller 返回单个实例时,这很好用。 .

返回 Collection 时在上述类型中,生成的 JSON 根据正在序列化的类型(每个子类的字段都存在)而变化,但不包括 @class属性,这是我们的客户端代码所需要的。

返回集合时如何将此类型提示放入序列化的 JSON 中?

//Returns complete with @class=com.package.blah
@RequestMapping("/json/getProduct.json")
public @ResponseBody Product getProduct(Integer id)
{
return service.getProduct(id);
}

//Does not include @class
@RequestMapping("/json/getProducts.json")
public @ResponseBody List<Product> getProducts()
{
return service.getProducts();
}

最佳答案

为此,您需要配置 ObjectMapper。这不是通过 Spring 直接实现的,因为 ObjectMapper 不是可设置的属性,而是具有设置其状态的可调用方法(然后将其存储为位掩码)。

如果您正在使用 <mvc:annotation-driven />您需要将其替换为等效的标记,可以在 Spring JavaDocs 中找到。

扩展对象映射器:

public class ConfigurableObjectMapper extends ObjectMapper
{
public ConfigurableObjectMapper()
{
this.enableDefaultTypingAsProperty(DefaultTyping.JAVA_LANG_OBJECT, JsonTypeInfo.Id.CLASS.getDefaultPropertyName());
}
}

然后告诉 Spring 使用此类的实例而不是默认实现。
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="0" />
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator" />
</bean>
</property>
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper">
<bean class="com.blitzgamesstudios.web.common.json.ConfigurableObjectMapper" />
</property>
</bean>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean class="org.springframework.http.converter.FormHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
</list>
</property>
</bean>

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />

关于json - @JsonTypeInfo 可以与集合一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7473558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com