2012-07-27 2 views
1

직렬화에 대해 클래스가 두 가지 방법으로 (String과 enum처럼) 속성을 보내는 방식으로 Jackson과 클래스를 직렬화하려고합니다. JSON 출력을 선언하지 않고 실제로 다른 속성을 JSON 출력에 추가하도록 Jackson을 결정하려면 어떻게해야합니까? :Jackson과 함께 추가 등록 정보를 직렬화 할 수 있습니까?

내 코드는 내가 잭슨으로 이것을 직렬화 할

private LearningForm cnfpLearningOrganisationLearningForm; 
...... 
/** 
* @return the cnfpLearningOrganisationLearningForm 
*/ 
public String getCnfpLearningOrganisationLearningFormSearch() { 
    return cnfpLearningOrganisationLearningForm.getValue(); 
} 

/** 
* @return the cnfpLearningOrganisationLearningForm 
*/ 
public LearningForm getCnfpLearningOrganisationLearningForm() { 
    return cnfpLearningOrganisationLearningForm; 
} 

이다 { .... cnfpLearningOrganisationLearningForm : someValue와 cnfpLearningOrganisationLearningFormSearch : differentValue 는 .... }

이 있습니까 CnfpLearningOrganisationLearningFormSearch를 클래스의 직렬화 (쓸모없는 예외) 필드로 선언하지 않고이 작업을 수행하는 방법은 무엇입니까?

감사합니다.

답변

0

동적 (당신이 열거와 문자열을 모두 반환하려면 내가 정확하게 질문을 이해 경우, 개체를 반환을 선언 할 수 있습니다)

@JsonProperty("test") 
public Object someProp(){ 
    if (condition) return SomeEnum.VALUE; 
    else 
     return "StringValue"; 
} 
+0

그 위치에 조건을 설정할 수있는 방법이 없습니다. 고마워.하지만, 나는 JsonProperty로 조금 놀아, 내가 무엇을 할 수 있는지 보자. – Andrei

1

속성 값을 평가할 수 있습니다 @JsonProperty 주석가있다 문제를 올바르게 이해하고 있다면 mixins으로 해결할 수 있습니다. 특히 엔티티를 수정할 수없는 것 같기 때문에 특히 그렇습니다.

0

cnfpLearningOrganisationLearningFormSearch를 클래스의 (직렬화를 제외하고는 쓸모없는) 필드로 선언하지 않고이 작업을 수행 할 수있는 방법이 있습니까?

예. 기본적으로 Jackson은 필드에 대한 고려없이 속성으로 getter를 사용합니다. 그래서, 원래의 질문에 설명 된 콩은 원하는대로 직렬화해야합니다.

다음 코드는이 지점을 보여줍니다 (좋은 측정을 위해 불필요한 열거 형을 넣음).

import com.fasterxml.jackson.databind.ObjectMapper; 

public class JacksonFoo 
{ 
    public static void main(String[] args) throws Exception 
    { 
    System.out.println(new ObjectMapper().writeValueAsString(new Bar())); 
    // output: {"propertyAsValue":"some_value","propertyAsEnum":"VALUE"} 
    } 
} 

class Bar 
{ 
    public String getPropertyAsValue() 
    { 
    return MyEnum.VALUE.getValue(); 
    } 

    public MyEnum getPropertyAsEnum() 
    { 
    return MyEnum.VALUE; 
    } 
} 

enum MyEnum 
{ 
    VALUE; 

    public String getValue() 
    { 
    return "some_value"; 
    } 
} 
관련 문제