2016-08-07 1 views
7

낙타의 경우 자바 객체를 json으로 serialize하려면 PropertyNamingStrategySNAKE_CASE으로 사용합니다.잭슨을 사용하여 JSON을 Java에서 낙타에 밑줄을 사용하여 디시리얼라이싱 하시겠습니까?

그래서, 그 반대가되는 것도 있습니다. 즉, 낙타 사례가있는 Java 객체에 밑줄이있는 json을 deserialise합니다.

예를 들어

, JSON :

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

이 자바 객체 직렬화 복원해야합니다

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 하나를보십시오. – 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

이것은 내가 지금까지 가지고있는 유일한 해결책이기 때문에이 대답을 받아들입니다. 그리고 이것을 수행하는 다른 방법이 없다고 가정합니다. –

관련 문제