下面列出了怎么用com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public ObjectMapper get()
{
ObjectMapper mapper = objectMapper;
if (mapper == null) {
final GuiceAnnotationIntrospector guiceIntrospector = new GuiceAnnotationIntrospector();
AnnotationIntrospector defaultAI = new JacksonAnnotationIntrospector();
MapperBuilder<?,?> builder = JsonMapper.builder()
.injectableValues(new GuiceInjectableValues(injector))
.annotationIntrospector(new AnnotationIntrospectorPair(guiceIntrospector, defaultAI))
.addModules(modulesToAdd);
for (Provider<? extends Module> provider : providedModules) {
builder = builder.addModule(provider.get());
}
mapper = builder.build();
/*
} else {
// 05-Feb-2017, tatu: _Should_ be fine, considering instances are now (3.0) truly immutable.
// But if this turns out to be problematic, may need to consider addition of `copy()`
// back in databind
mapper = mapper.copy();
*/
}
return mapper;
}
public void testJaxbAnnotatedObject() throws Exception
{
AnnotationIntrospector primary = new JaxbAnnotationIntrospector();
AnnotationIntrospector secondary = new JacksonAnnotationIntrospector();
AnnotationIntrospector pair = new AnnotationIntrospectorPair(primary, secondary);
ObjectMapper mapper = objectMapperBuilder()
.annotationIntrospector(pair)
.build();
JaxbAnnotatedObject original = new JaxbAnnotatedObject("123");
String json = mapper.writeValueAsString(original);
assertFalse("numberString field in JSON", json.contains("numberString")); // kinda hack-y :)
JaxbAnnotatedObject result = mapper.readValue(json, JaxbAnnotatedObject.class);
assertEquals(new BigDecimal("123"), result.number);
}
public void testXmlElementAndXmlElementRefs() throws Exception
{
Bean<A> bean = new Bean<A>();
bean.r = new A(12);
bean.name = "test";
AnnotationIntrospector pair = new AnnotationIntrospectorPair(
new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector());
ObjectMapper mapper = objectMapperBuilder()
.annotationIntrospector(pair)
.build();
// mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector());
// mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector());
String json = mapper.writeValueAsString(bean);
// !!! TODO: verify
assertNotNull(json);
}
public void testSimpleIgnore() throws Exception
{
// first: only Jackson introspector (default)
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> result = writeAndMap(mapper, new IgnoreBean());
assertEquals(2, result.size());
assertEquals("abc", result.get("text"));
assertEquals(Boolean.TRUE, result.get("any"));
// Then JAXB only
mapper = objectMapperBuilder()
.annotationIntrospector(_jaxbAI)
.build();
// jackson one should have priority
result = writeAndMap(mapper, new IgnoreBean());
assertEquals(2, result.size());
assertEquals(Integer.valueOf(13), result.get("number"));
assertEquals(Boolean.TRUE, result.get("any"));
// then both, Jackson first
mapper = objectMapperBuilder()
.annotationIntrospector(new AnnotationIntrospectorPair(_jacksonAI, _jaxbAI))
.build();
result = writeAndMap(mapper, new IgnoreBean());
assertEquals(1, result.size());
assertEquals(Boolean.TRUE, result.get("any"));
// then both, JAXB first
mapper = objectMapperBuilder()
.annotationIntrospector(new AnnotationIntrospectorPair(_jaxbAI, _jacksonAI))
.build();
result = writeAndMap(mapper, new IgnoreBean());
assertEquals(1, result.size());
assertEquals(Boolean.TRUE, result.get("any"));
}
public void testSimpleFieldIgnore() throws Exception
{
ObjectMapper mapper;
// first: only Jackson introspector (default)
mapper = new ObjectMapper();
Map<String,Object> result = writeAndMap(mapper, new IgnoreFieldBean());
assertEquals(2, result.size());
assertEquals("123", result.get("text"));
assertEquals(Boolean.TRUE, result.get("any"));
// Then JAXB only
mapper = objectMapperBuilder()
.annotationIntrospector(_jaxbAI)
.build();
// jackson one should have priority
result = writeAndMap(mapper, new IgnoreFieldBean());
assertEquals(2, result.size());
assertEquals(Integer.valueOf(7), result.get("number"));
assertEquals(Boolean.TRUE, result.get("any"));
// then both, Jackson first
mapper = objectMapperBuilder()
.annotationIntrospector(new AnnotationIntrospectorPair(_jacksonAI, _jaxbAI))
.build();
result = writeAndMap(mapper, new IgnoreFieldBean());
assertEquals(1, result.size());
assertEquals(Boolean.TRUE, result.get("any"));
// then both, JAXB first
mapper = objectMapperBuilder()
.annotationIntrospector(new AnnotationIntrospectorPair(_jaxbAI, _jacksonAI))
.build();
result = writeAndMap(mapper, new IgnoreFieldBean());
assertEquals(1, result.size());
assertEquals(Boolean.TRUE, result.get("any"));
}
/**
* Test that will just use Jackson annotations, but did trigger [JACKSON-495] due to a bug
* in JAXB annotation introspector.
*/
public void testIssue495() throws Exception
{
ObjectMapper mapper = objectMapperBuilder()
.annotationIntrospector(new AnnotationIntrospectorPair(_jacksonAI, _jaxbAI))
.build();
CreatorBean bean = mapper.readValue("{\"name\":\"foo\"}", CreatorBean.class);
assertNotNull(bean);
}
protected MapperBuilder<?,?> getJaxbAndJacksonMapperBuilder()
{
return JsonMapper.builder()
.annotationIntrospector(new AnnotationIntrospectorPair(
new JaxbAnnotationIntrospector(),
new JacksonAnnotationIntrospector()));
}
/**
* Creates a configured mapper supporting JAXB.
* @see #createObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)
*/
public static ObjectMapper createJaxbMapper() {
ObjectMapper om = createObjectMapper(createObjectMapper());
JaxbAnnotationIntrospector jaxbIntr = new JaxbAnnotationIntrospector(om.getTypeFactory());
JacksonAnnotationIntrospector jsonIntr = new JacksonAnnotationIntrospector();
om.setAnnotationIntrospector(new AnnotationIntrospectorPair(jsonIntr, jaxbIntr));
return om;
}
public BaseSettings withInsertedAnnotationIntrospector(AnnotationIntrospector ai) {
return withAnnotationIntrospector(AnnotationIntrospectorPair.create(ai, _annotationIntrospector));
}
public BaseSettings withAppendedAnnotationIntrospector(AnnotationIntrospector ai) {
return withAnnotationIntrospector(AnnotationIntrospectorPair.create(_annotationIntrospector, ai));
}
protected MapperBuilder<?,?> getJacksonAndJaxbMapperBuilder()
{
return JsonMapper.builder()
.annotationIntrospector(new AnnotationIntrospectorPair(new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector()));
}