2016-08-07 5 views
7

キャメルケースの属性を持つJavaオブジェクトをjsonにシリアル化するには、PropertyNamingStrategySNAKE_CASEとします。ジャクソンを使用してJavaでキャメルケースのアンダースコアを使用してJSONを非正規化する方法はありますか?

それでは、逆のこともあります。つまり、ラクダのケースでJavaオブジェクトに下線を付けてjsonを省略します。例えば

、 JSON:

{ 
    "user_id": "213sdadl" 
    "channel_id": "asd213l" 
} 

は、このJavaオブジェクトに直列化復元する必要があります。

public class User { 
    String userId; // should have value "213sdadl" 
    String channelId; // should have value "asd213l" 
} 

私はフィールドレベルで動作します@JsonProperty注釈経由でone way of doing thisを知っています。私はこれのためのグローバルな設定を知ることに興味があります。

+1

@JLewkovichこのISNを正確に重複していません。質問の最後の行をお読みください。私はそこで受け入れられた答えである '@ JsonProperty'アノテーションについて話していません。 –

+0

実際に参照された質問は、あなたがおそらく興味があった答えを持っています、最高のupvoted 1を見てください – Quadrat137

+0

@ Quadrat137はい私は答えを見ている、あなたはまた答えの下に私のコメントを見ることができます。それは私のために両方の方法で動作しませんでした。それが私の質問だった。 –

答えて

4

さてあなたはこのようなものになりますPropertyNamingStrategyの実装持つことができます。

import org.codehaus.jackson.map.MapperConfig; 
import org.codehaus.jackson.map.PropertyNamingStrategy; 
import org.codehaus.jackson.map.introspect.AnnotatedField; 
import org.codehaus.jackson.map.introspect.AnnotatedMethod; 

public class CustomNameStrategy 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) { 
    String a = convert(defaultName); 
    return a; 
    } 

    public String convert(String defaultName) 
    { 
    char[] arr = defaultName.toCharArray(); 
    StringBuilder nameToReturn = new StringBuilder(); 

    for(int i=0; i< arr.length(); i++){ 
     if(arr[i] == '_'){ 
     nameToReturn.append(Character.toUpperCase(arr[i+1])); 
     i++; 
     }else{ 
     nameToReturn.append(arr[i]); 
     } 
    } 
    return nameToReturn.toString(); 
    } 

} 
あなたの実装で、その後

またはクラスdesrializationはあなたが持つことができない。

ObjectMapper mapper = new ObjectMapper(); 
mapper.setPropertyNamingStrategy(new CustomNameStrategy()); 
YourClass yourClass = mapper.readValue(yourJsonString, YourClass.class); 
+0

これは私がこれまでに得た唯一の解決策であるため、私はこの回答を受け入れています。 –

関連する問題