2

@ResponseBody で json データを取得するために、Spring MVC 3 と MappingJacksonHttpMessageConverter を使用しています。デフォルトの構成では問題なく動作しますが、キャメルケース フィールドをパスカル ケースに変換する必要があります。この目的のために、カスタム命名戦略を開発しました。

UpperCaseNamingStrategy.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 データを要求すると動作は同じで、コンバーター メソッドは呼び出されません。さらに構成が必要ですか?

4

1 に答える 1

0

私のプロジェクトで行ったことと比較して、次の変更が提案されています。

  1. マッパー Bean クラスを「com.fasterxml.jackson.databind.ObjectMapper」に変更します。Spring 4.3を使用しています
  2. シリアライズ/デシリアライズするクラスのプロパティに @JsonProperty アノテーションを追加する
  3. シリアル化/非シリアル化されているクラスにデフォルト コンストラクターを作成する

幸運を祈ります!

于 2017-10-23T06:29:26.160 に答える