2012-03-02 6 views
2

잭슨을 사용하여 일부 JSON을 Java POJO로 역 직렬화합니다. MrBean 모듈을 객체 매퍼 (object mapper)에 등록합니다. 따라서해야 할 일은 일련의 인터페이스를 정의하는 것뿐입니다. POJO는 이러한 인터페이스를 기반으로 자동 생성됩니다.잭슨 (및 MrBean)과 비 직렬화시 다형성 사용

자격증 명 인터페이스와 같이 자격증 명 인터페이스를 확장하고 싶습니다. UsernamePasswordCredentials 및 CertificateFileCredentials. 나는 또한 followed the instructions at another StackOverflow post했습니다

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "username" (Class org.codehaus.jackson.generated.SCRUBBED.Credentials), not marked as ignorable 
at [Source: [email protected]; line: 32, column: 29] (through reference chain: HostConfiguration["hostDefinitions"]->HostDefinition["credentials"]->Credentials["username"]) 

, 나는 같은 오류를 받고 있어요 :

이 작업 만들려고 어떤 주석이나 주술없이 이렇게하면 내 단위 테스트 나에게 다음과 같은 오류를 제공합니다.

오류는 의미가 있습니다. Jackson은 내 JSON 파일의 내용을 빈 인터페이스에 매핑하려고합니다. 그러나 필자는 Jackson이 기본 Credentials 인터페이스를 확장하는 인터페이스를 찾고 해당 인터페이스의 필드를 JSON 객체에서 찾은 필드와 일치 시키려고했습니다.

JSON 개체에서 메타 정보를 사용하는 예를 Jackson Wiki에서 보았습니다. 객체를 "@class":"foo.bar.CertificateFileCredentials"으로 꾸미고 싶지만 JSON 입력이 다른 서비스에 의해 자동으로 생성되고 그 다른 서비스가 내 서비스의 내부에 대해 알 필요가 없으므로 그 중 하나를 피하는 것이 좋습니다.

감사합니다.

답변

0

실제 구현 클래스를 어떻게 정의합니까? 추가 인터페이스로? 그것들은 올바르게 생성되어야합니다. 그러나 deserialization 중에는 문제가 있습니다. 여러 선택 사항이있는 경우 디시리얼라이저가 실제 유형을 찾을 수있는 방법이 있어야합니다. 알다시피, @JsonTypeInfo을 사용하는 것이 좋습니다.

0

실제로 JSON을 생성하는 서비스를 제어하지는 않지만이 기술은 사용자의 목적에 맞게 잘 작동합니다.

@JsonTypeInfo를 사용할 때 클래스 이름을 저장하는 것이 좋은 기본 설정이지만, 사용자가 원하는대로이 클래스를 사용자 정의 할 수 있습니다.

{ meows: 400, furColor: "green", species: "cat" } 

그런 다음 제대로 변환하는 이러한 인터페이스를 정의 할 수 있습니다 :

예를 들어

, 서비스는 다음과 같습니다 JSON을 생성 가정합니다. 직렬화 복원 할 때

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY,property="species") 
@JsonSubTypes({ 
     @JsonSubTypes.Type(value=Feline.class, name="cat") 
}) 
public interface Animal { 
    public String getFurColor(); 
} 

@JsonTypeName("cat") 
public interface Feline extends Animal { 
    @JsonProperty("meows") // just to have an example of a renamed property... 
    public long getMeowingVolumeInDecibels(); 
} 

그럼 그냥 자동으로 자동 실행시의 형태에 따라 "종"속성을 생성으로, 런타임에 적절한 자바 유형을 얻어야한다. 희망이 도움이됩니다!