当前位置: 首页 > 知识库问答 >
问题:

Jackson+Spring3.0.5自定义对象映射器

丌官晔
2023-03-14
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean
                class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="objectMapper" ref="jacksonObjectMapper" />
            </bean>
        </list>
    </property>
</bean>

<bean id="jacksonObjectMapper" class="ro.softwin.cnfp.ConversionServiceAwareObjectMapper" />

<bean
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="json" value="application/json" />
            <entry key="html" value="text/html" />
        </map>
    </property>
    <property name="viewResolvers">
        <list>
            <bean
                class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="viewClass"
                    value="org.springframework.web.servlet.view.JstlView" />
                <property name="prefix" value="/jsp/" />
                <property name="suffix" value=".jsp" />
            </bean>
        </list>
    </property>
    <property name="defaultViews">
        <list>
            <bean
                class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <property name="prefixJson" value="false" />
                <property name="objectMapper" value="jacksonObjectMapper" />
            </bean>
        </list>
    </property>
</bean>
public class ConversionServiceAwareObjectMapper extends ObjectMapper {
@Autowired
public ConversionServiceAwareObjectMapper(
        ConversionService conversionService) {
    AnnotationIntrospector introspector = AnnotationIntrospector.pair(
            new FormatAnnotationIntrospector(conversionService),
            DEFAULT_ANNOTATION_INTROSPECTOR);

    this.setDeserializationConfig(this.getDeserializationConfig()
            .withAnnotationIntrospector(introspector));
    this.setSerializationConfig(this.getSerializationConfig()
            .withAnnotationIntrospector(introspector).withSerializationInclusion(JsonSerialize.Inclusion.NON_NULL));

}

初始化服务器时,出现以下错误:

java.lang.IllegalStateException:无法将[java.lang.String]类型的值转换为属性“Object Mapper”所需的类型[org.codehaus.jackson.map.objectMapper]:在org.springframework.beans.typeConverterDelegate.ConvertifEmental(typeConverterDelegate.java:241)和org.springframework.beans.beanWrapperImpl.ConvertifEmental(beanWrapperImpl.java:470)中找不到匹配的编辑器或转换策略...

我尝试切换到一个普通的视图解析器,只在AnnotationMethodHandler中使用对象映射器,这可以用于服务器启动,但它完全忽略了任何配置。

我完全不知道下一步该做什么。

谢谢你的帮助。

共有1个答案

洪伟兆
2023-03-14

更新:

<property name="objectMapper" value="jacksonObjectMapper" />

与:

<property name="objectMapper" ref="jacksonObjectMapper" />

引用不是值。

 类似资料:
  • 我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N

  • 我正在用spring MVC开发一个REST webservice。我需要更改jackson 2序列化mongodb对象的方式。我不知道该怎么做,因为我找到了Jackson2的部分文档,我所做的是创建一个自定义序列化程序:

  • 我将 Jackson 2.7.5 与 Jersey 2.25.1 配合使用。我正在尝试修复现有的生产代码,当它在JSON输入中获得意外字段时,它现在因“无法识别的PropertyException:无法识别的字段”而失败。 在研究这个问题时,我发现了几篇旧帖子(5年),建议各种修复方法与我当前的代码非常不同。我不太关注这些,因为它们是针对旧版本的Jackson/Jersey。最近的建议,包括泽西岛

  • 我想在从AbstractEndPoint派生的endpoint上使用不同的jackson ObjectMapper实例(而不是在其他映射URL上使用的实例)。 为了澄清这个问题,我不想更改或自定义对象映射器,它由不同的URL使用,不同的URL来自AbstractEndpoints(如HealtEndpoint、MetricsEndpoint)。我想专门将新的对象映射器注入到管理endpoint中。

  • 使用代替和代替 然后在请求属性中添加 但是当我在javascript中检索它时,我得到了jsonObject的值 我在我的项目中已经使用了下面的库,如果需要,可以使用任何新的库

  • 给出以下SQL模式: 我想要一个地图绘制者,比如: 所以我可以这样做: 我不知道怎么做,除了在personMapper之后。getPersons()来操作结果。