나는 비슷한 것을 올렸지 만 여전히 문제를 제로로하려고 노력하고 있습니다.Jackson 믹스가 호출되지 않음
나를 도와 주셔서 감사합니다.
잭슨이 믹스 인을 호출하지 않아서 그 이유를 알 수없는 것처럼 보입니다.
"요소"는 클래스가 아닌 인터페이스입니다. 일반적으로 믹스 인 (아래)에 표시된 것처럼 정적 팩토리 콜을 사용하여 인스턴스화됩니다. 잭슨이 interface : Element.class를 볼 때 믹스 인을 찾아서 @JsonCreator 주석이있는 메소드를 실행해야합니다. 이 모든 일은 일어나지 않고 있습니다. 그렇다면 로거의 출력을 볼 수 있습니다. 대신, 오류 메시지 (아래)에서 볼 수 있듯이 jackson은 클래스로 내 인터페이스를 처리하려고 시도 할 수 없습니다.
왜 내 mixin이 작동하지 않습니까?
// Instantiate my interface, put some data in and serialize.
Element ela = FhirFactory.eINSTANCE.createElement();
ela.setId("CBAEL");
StringWriter writer = new StringWriter();
mapper.writeValue(writer, ela);
// Now try to deserialize into a new instance.
StringReader reader = new StringReader(writer.toString());
Element elp = mapper.readValue(reader, Element.class);//Error thrown
assertNotNull(elp);
오류 :
다음ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(Element.class, ElementMixin.class);
내가 실행 일 오전 방법은 다음과 같습니다 나는 매퍼에 등록하는 방법
다음public class ElementMixin {
private static Logger log = LoggerFactory.getLogger(ElementMixin.class);
@JsonCreator
public static Element create() {
log.error("Element==>");
return FhirFactory.eINSTANCE.createElement();
}
}
가있다 : 여기
은 믹스 인의com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of fhir.Element, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information at [Source: [email protected]; line: 1, column: 1] at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:255) at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1007) at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:150) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3807) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2844) at gov.nist.forecast.fhir.resources.IndexResourceTest.testParametersJSON(IndexResourceTest.java:173)
"주석 연결"이 의미하는 것이 확실하지 않습니다. –
필드 나 메소드를 추가한다고 생각하지 않습니다. 내가 원했던 것은 jackson이 등록 된 인터페이스를 볼 때마다 적절한 팩토리 메소드 (생성자와 반대)를 호출하는 것입니다. 나는 변경할 수없는 제 3 자 lib에 646 개가있다. 이 게시물에 따르면, 그것은 작동해야합니다 [link] http://www.cowtowncoder.com/blog/archives/2011/07/entry_457.html [link] –
@GeoffryRoberts 그래서 대상 클래스가 일치하는 공장 방법을 가지고 있습니까? 그렇다면 작동합니다. 믹스 인 클래스에서 정적 메서드가 호출 될 것으로 예상했는데 내 설명대로 발생하지 않을 것입니다. 믹스 인 클래스는 AT에서 사용되는 주석을 검사하는 것 외에는 "사용되지 않습니다." 클래스가 있습니다. – StaxMan