下面列出了怎么用com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder的API类实例代码及写法,或者点击链接到github查看源代码。
private static Optional<Constructor<?>> getConstructorHavingJsonBuilder(Class<?> clazz) {
for (Constructor<?> constructor : clazz.getDeclaredConstructors()) {
final List<Class<?>> parameterTypes = Arrays.stream(constructor.getParameterTypes())
.filter(s -> s.getName().contains("Builder")).collect(Collectors.toList());
if (parameterTypes.size() > 0) {
final Annotation[] annotations = parameterTypes.get(0).getAnnotations();
for (Annotation annotation : annotations) {
if (annotation.annotationType() == JsonPOJOBuilder.class) {
return Optional.of(constructor);
}
}
}
}
return Optional.empty();
}
private MethodSpec newInstanceMethod(TypeMirror beanType, MethodSpec createMethod, boolean useBuilder) {
MethodSpec.Builder builder = MethodSpec.methodBuilder("newInstance")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.returns(ParameterizedTypeName.get(ClassName.get(Instance.class), ClassName.get(beanType)))
.addParameter(JsonReader.class, "reader")
.addParameter(JsonDeserializationContext.class, "ctx")
.addParameter(JsonDeserializerParameters.class, "params")
.addParameter(ParameterizedTypeName.get(Map.class, String.class, String.class), "bufferedProperties")
.addParameter(ParameterizedTypeName.get(Map.class, String.class, Object.class), "bufferedPropertiesValues");
if (useBuilder) {
TypeElement builderElement = getBuilderElement();
JsonPOJOBuilder jsonPOJOBuilder = builderElement.getAnnotation(JsonPOJOBuilder.class);
String buildMethodName = JsonPOJOBuilder.DEFAULT_BUILD_METHOD;
if (nonNull(jsonPOJOBuilder)) {
buildMethodName = jsonPOJOBuilder.buildMethodName();
}
builder.addStatement("return new $T(builderDeserializer.deserializeInline(reader, ctx, params, null, null, null, bufferedProperties)." + buildMethodName + "(), bufferedProperties)",
ParameterizedTypeName.get(ClassName.get(Instance.class), ClassName.get(beanType)));
} else if (isUseJsonCreator()) {
buildAssignProperties(beanType, createMethod, builder);
} else {
builder.addStatement("return new $T($N(), bufferedProperties)",
ParameterizedTypeName.get(ClassName.get(Instance.class), ClassName.get(beanType)),
createMethod);
}
return builder.build();
}
protected POJOPropertiesCollector collectPropertiesWithBuilder(MapperConfig<?> config,
JavaType type, MixInResolver r, boolean forSerialization)
{
AnnotatedClass ac = _resolveAnnotatedClass(config, type, r);
AnnotationIntrospector ai = config.isAnnotationProcessingEnabled() ? config.getAnnotationIntrospector() : null;
JsonPOJOBuilder.Value builderConfig = (ai == null) ? null : ai.findPOJOBuilderConfig(ac);
String mutatorPrefix = (builderConfig == null) ? JsonPOJOBuilder.DEFAULT_WITH_PREFIX : builderConfig.withPrefix;
return constructPropertyCollector(config, ac, type, forSerialization, mutatorPrefix);
}
@Override
public JsonPOJOBuilder.Value findPOJOBuilderConfig()
{
return (_annotationIntrospector == null) ?
null : _annotationIntrospector.findPOJOBuilderConfig(_classInfo);
}
@Override
public JsonPOJOBuilder.Value findPOJOBuilderConfig(AnnotatedClass ac) {
JsonPOJOBuilder.Value result = _primary.findPOJOBuilderConfig(ac);
return (result == null) ? _secondary.findPOJOBuilderConfig(ac) : result;
}
public void setPOJOBuilder(AnnotatedMethod buildMethod, JsonPOJOBuilder.Value config) {
_buildMethod = buildMethod;
_builderConfig = config;
}
public JsonPOJOBuilder.Value getBuilderConfig() {
return _builderConfig;
}
/**
* @since 2.0
*/
public JsonPOJOBuilder.Value findPOJOBuilderConfig(AnnotatedClass ac) {
return null;
}
/**
* Method for finding configuration for POJO Builder class.
*/
public abstract JsonPOJOBuilder.Value findPOJOBuilderConfig();