Jackson + Spring3.0.5自定义对象映射器 [英] Jackson+Spring3.0.5 custom object mapper

查看:143
本文介绍了Jackson + Spring3.0.5自定义对象映射器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很难在Spring应用程序上配置Jackson。我可以让它工作,但它似乎不接受任何类型的配置。基本上我想要实现的是有一个ObjectMapper,它扫描Spring格式的注释。



我正在尝试的是:

 < bean class =org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter> 
< property name =messageConverters>
< list>
< bean
class =org.springframework.http.converter.json.MappingJacksonHttpMessageConverter>
< property name =objectMapperref =jacksonObjectMapper/>
< / bean>
< / list>
< / property>
< / bean>

< bean id =jacksonObjectMapperclass =ro.softwin.cnfp.ConversionServiceAwareObjectMapper/>

< bean
class =org.springframework.web.servlet.view.ContentNegotiatingViewResolver>
< property name =mediaTypes>
< map>
< entry key =jsonvalue =application / json/>
< entry key =htmlvalue =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 =prefixvalue =/ jsp //>
< property name =suffixvalue =。jsp/>
< / bean>
< / list>
< / property>
< property name =defaultViews>
< list>
< bean
class =org.springframework.web.servlet.view.json.MappingJacksonJsonView>
< property name =prefixJsonvalue =false/>
< property name =objectMappervalue =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]的值转换为必需的类型[属性'objectMapper'的org.codehaus.jackson.map.ObjectMapper]:没有匹配的编辑器或转换策略在org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:241)
at org .springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:470)
... 55更多



我尝试切换到普通视图解析器并且只是拥有AnnotationMethodHandler中的对象映射器,它适用于服务器启动,但它完全忽略了任何配置。



我完全不知道该做什么谢谢你的帮助。

解决方案

更新:

 < property name =objectMappervalue =jacksonObjectMapper/> 

with:

 < property name =objectMapperref =jacksonObjectMapper/> 

ref ref not value。


I am having a hard time configuring Jackson on my Spring application. I can get it to work, but it does not seem to accept any kind of configurations. Basically what i'm trying to achieve is have an ObjectMapper that scans for Spring format annotations.

What i am trying is this:

<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>

The code for the mapper is :

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));

}

}

When initializing the server the following error occurs:

java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.codehaus.jackson.map.ObjectMapper] for property 'objectMapper': no matching editors or conversion strategy found at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:241) at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:470) ... 55 more

I tried switching to a normal view resolver and just having the object mapper in the AnnotationMethodHandler, and that works regarding server start-up, but it just completely ignores any configuration.

I am completely at a loss as to what to do next.

Thanks for any help.

解决方案

Update :

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

with:

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

ref not value.

这篇关于Jackson + Spring3.0.5自定义对象映射器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆