주석이없는 클래스를 직렬화하기 위해 Jackson 2.0 mixins을 실험하고있었습니다.기본 Jackson Mixin을 사용할 수 없습니다.
아래의 간단한 소스 코드. getters/setter를 사용하지는 않지만 믹스를 계속 사용할 수있는 것 같습니다. according to some fairly sketchy documentation. 나는 주요 실행하면
public class NoAnnotation {
private Date created;
private String name;
private int id;
private List<URL> urls = new ArrayList();
// make one with some data in it for the test
static NoAnnotation make() {
NoAnnotation na= new NoAnnotation();
na.created = new Date();
na.name = "FooBear";
na.id = 23456;
try {
na.urls.add(new URL("http://www.eclipse.org/eclipselink/moxy.php"));
na.urls.add(new URL("http://jaxb.java.net"));
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
return na;
}
// my Mixin "Class"
static class JacksonMixIn {
JacksonMixIn(@JsonProperty("created") Date created,
@JsonProperty("name") String name,
@JsonProperty("id") int id,
@JsonProperty("urls") List<URL> urls)
{ /* do nothing */ }
}
// test code
public static void main(String[] args) throws Exception {
NoAnnotation na = NoAnnotation.make();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixInAnnotations(NoAnnotation.class, JacksonMixIn.class);
String jsonText = objectMapper.writeValueAsString(na);
System.out.println(jsonText);
}
}
나는 내가 어딘가에 단계 기본 "setThis"을 떠납니다 같은데요
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.flyingspaniel.so.NoAnnotation and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS))
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:51)
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:25)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:108)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2407)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:1983)
at com.flyingspaniel.so.NoAnnotation.main(NoAnnotation.java:49)
를 얻을 수 있지만, 무엇을 알지 못한다. 감사!
편집 : 나는 예외의 지침을 따라 줄
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
나는 더 이상 예외가 없습니다를 추가 할 수 있지만 결과는 빈 JSON 문자열 "{}"인 경우.
EDIT2 : 필드를 공용으로 만들면 작동하지만 합리적인 개체 디자인이 아닙니다.