【问题标题】:Custom ObjectMapper and NamingStrategy in Spring 3 MVCSpring 3 MVC 中的自定义 ObjectMapper 和 NamingStrategy
【发布时间】:2013-07-19 08:06:14
【问题描述】:

我正在使用 Spring MVC 3 和 MappingJacksonHttpMessageConverter 以通过 @ResponseBody 获取 json 数据。使用默认配置可以正常工作,但现在我需要将 camelCase 字段转换为 Pascal 大小写。为此,我开发了一个自定义命名策略:

大写命名策略.java

public class UpperCaseNamingStrategy extends PropertyNamingStrategy {

    @Override
    public String nameForField(MapperConfig config, AnnotatedField field, String defaultName){
        return convert(defaultName);
    }

    @Override
    public String nameForGetterMethod(MapperConfig config, AnnotatedMethod method, String defaultName){
        return convert(defaultName);
    }

    @Override
    public String nameForSetterMethod(MapperConfig config, AnnotatedMethod method, String defaultName){
        return convert(defaultName);
    }

    public String convert(String defaultName){
        char[] arr= defaultName.toCharArray();
        if(arr.length != 0){
            if(Character.isLowerCase(arr[0])){
                arr[0] = Character.toUpperCase(arr[0]);
            }
        }
        return new StringBuilder().append(arr).toString();
    }
}

我将自定义策略设置为 objectMapper,并在转换器中设置了 objectMapper。这些是豆子:

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="objectMapper" ref="jacksonObjectMapper" />
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
        <ref bean="jacksonMessageConverter"/>
        </list>
    </property>
</bean>

<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper">
    <property name="propertyNamingStrategy" ref="namingStrategy"/>
</bean>

<bean id="namingStrategy" class="es.unican.meteo.util.UpperCaseNamingStrategy"></bean>

bean 已正确注册,因为我可以在日志中看到它,但是当我请求 json 数据时,行为是相同的,并且不会调用转换器方法。我需要更多配置吗?

【问题讨论】:

    标签: json spring spring-mvc jackson


    【解决方案1】:

    与我在项目中所做的相比,建议进行以下更改:

    1. 将映射器 bean 类更改为“com.fasterxml.jackson.databind.ObjectMapper”。我正在使用 Spring 4.3
    2. 将@JsonProperty 注释添加到正在序列化/反序列化的类的属性中
    3. 在被序列化/反序列化的类中创建默认构造函数

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多