com.fasterxml.jackson.databind.ObjectMapper#getDeserializationConfig ( )源码实例Demo

下面列出了com.fasterxml.jackson.databind.ObjectMapper#getDeserializationConfig ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Test
public void testGenerateDocumentationForBasicTypes() throws Exception {
    // given
    ObjectMapper mapper = createMapper();
    mockFieldComment(BasicTypes.class, "string", "A string");
    mockFieldComment(BasicTypes.class, "bool", "A boolean");
    mockFieldComment(BasicTypes.class, "number", "An integer");
    mockFieldComment(BasicTypes.class, "decimal", "A decimal");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(), mapper.getDeserializationConfig(),
                    javadocReader, constraintReader, typeMapping, SnippetTranslationManager.getDefaultResolver(),
                    null);
    Type type = BasicTypes.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());
    // then
    assertThat(result.size(), is(4));
    assertThat(result.get(0), is(descriptor("string", "String", "A string", "true")));
    assertThat(result.get(1), is(descriptor("bool", "Boolean", "A boolean", "true")));
    assertThat(result.get(2), is(descriptor("number", "Integer", "An integer", "true")));
    assertThat(result.get(3), is(descriptor("decimal", "Decimal", "A decimal", "true")));
}
 
@Test
public void testGenerateDocumentationForExternalSerializer() throws Exception {
    // given
    ObjectMapper mapper = createMapper();
    mockFieldComment(ExternalSerializer.class, "bigDecimal", "A decimal");

    SimpleModule testModule = new SimpleModule("TestModule");
    testModule.addSerializer(new BigDecimalSerializer());
    mapper.registerModule(testModule);

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = ExternalSerializer.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(result.size(), is(1));
    assertThat(result.get(0), is(descriptor("bigDecimal", "Decimal", "A decimal", "true")));
}
 
@Test
public void testGenerateDocumentationWithTags() throws Exception {
    // given
    ObjectMapper mapper = createMapper();
    mockFieldComment(BasicTypes.class, "string", "A string");
    mockFieldTag(BasicTypes.class, "string", "see", "this");
    mockFieldComment(BasicTypes.class, "bool", "A boolean");
    mockFieldTag(BasicTypes.class, "bool", "see", "<a href=\"xyz\">docs</a>");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(), mapper.getDeserializationConfig(),
                    javadocReader, constraintReader, typeMapping, SnippetTranslationManager.getDefaultResolver(),
                    null);
    Type type = BasicTypes.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());
    // then
    assertThat(result.size(), is(4));
    assertThat(result.get(0),
            is(descriptor("string", "String", "A string<br>See this.", "true")));
    assertThat(result.get(1),
            is(descriptor("bool", "Boolean", "A boolean<br>See <a href=\"xyz\">docs</a>.",
                    "true")));
}
 
@Test
public void testGenerateDocumentationForRequiredProperties() throws Exception {
    // given
    ObjectMapper mapper = createMapper();
    mockFieldComment(RequiredProperties.class, "string", "A string");
    mockFieldComment(RequiredProperties.class, "number", "An integer");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(), mapper.getDeserializationConfig(),
                    javadocReader, constraintReader, typeMapping, SnippetTranslationManager.getDefaultResolver(),
                    null);
    Type type = RequiredProperties.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());
    // then
    assertThat(result.size(), is(2));
    assertThat(result.get(0), is(descriptor("string", "String", "A string", "false")));
    assertThat(result.get(1), is(descriptor("number", "Integer", "An integer", "false")));
}
 
public AbstractTypeCustomizationFactory(ObjectMapper mapper) {
  this.serializerProvider = mapper.getSerializerProviderInstance();
  this.serializerFactory = (CustomBeanSerializerFactory) mapper.getSerializerFactory();
  this.typeFactory = mapper.getTypeFactory();

  this.deserializationContext = mapper.getDeserializationContext();
  this.deserializationConfig = mapper.getDeserializationConfig();
}
 
protected FieldDescriptors createFieldDescriptors(Operation operation,
        HandlerMethod handlerMethod) {
    ObjectMapper objectMapper = getObjectMapper(operation);

    JavadocReader javadocReader = getJavadocReader(operation);
    ConstraintReader constraintReader = getConstraintReader(operation);
    SnippetTranslationResolver translationResolver = getTranslationResolver(operation);
    TypeMapping typeMapping = getTypeMapping(operation);
    JsonProperty.Access skipAcessor = getSkipAcessor();

    Type type = getType(handlerMethod);
    if (type == null) {
        return new FieldDescriptors();
    }

    try {
        FieldDocumentationGenerator generator = new FieldDocumentationGenerator(
                objectMapper.writer(), objectMapper.getDeserializationConfig(), javadocReader,
                constraintReader, typeMapping, translationResolver, skipAcessor);
        FieldDescriptors fieldDescriptors = generator.generateDocumentation(type, objectMapper.getTypeFactory());

        if (shouldFailOnUndocumentedFields()) {
            assertAllDocumented(fieldDescriptors.values(),
                    translationResolver.translate(getHeaderKey(operation)).toLowerCase());
        }
        return fieldDescriptors;
    } catch (JsonMappingException e) {
        throw new JacksonFieldProcessingException("Error while parsing fields", e);
    }
}
 
@Test
public void testGenerateDocumentationForNestedTypes() throws Exception {
    // given
    ObjectMapper mapper = createMapper();
    mockFieldComment(FirstLevel.class, "second", "2nd level");
    mockFieldComment(SecondLevel.class, "third", "3rd level");
    mockFieldComment(ThirdLevel.class, "fourth", "4th level");
    mockFieldComment(FourthLevel.class, "fifth", "5th level");
    mockFieldComment(FifthLevel.class, "last", "An integer");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = FirstLevel.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(result.size(), is(5));
    assertThat(result.get(0),
            is(descriptor("second", "Object", "2nd level", "true")));
    assertThat(result.get(1),
            is(descriptor("second.third", "Array[Object]", "3rd level", "true")));
    assertThat(result.get(2),
            is(descriptor("second.third[].fourth", "Object", "4th level", "true")));
    assertThat(result.get(3),
            is(descriptor("second.third[].fourth.fifth", "Array[Object]", "5th level",
                    "true")));
    assertThat(result.get(4),
            is(descriptor("second.third[].fourth.fifth[].last", "Integer", "An integer",
                    "true")));
}
 
@Test
public void testGenerateDocumentationForRecursiveTypes() throws Exception {
    // given
    ObjectMapper mapper = createMapper();
    FieldDocumentationGenerator generator = new FieldDocumentationGenerator(mapper.writer(),
            mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
            SnippetTranslationManager.getDefaultResolver(), null);
    Type type = RecursiveType.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(result.size(), is(16));
    assertThat(result.get(0), is(descriptor("sub1", "Array[Object]", "", "true")));
    assertThat(result.get(1), is(descriptor("sub2", "Object", "", "true")));
    assertThat(result.get(2), is(descriptor("sub3", "Array[Object]", "", "true")));
    assertThat(result.get(3), is(descriptor("sub4", "Object", "", "true")));
    assertThat(result.get(4), is(descriptor("sub5", "Array[Object]", "", "true")));
    assertThat(result.get(5), is(descriptor("sub6", "Object", "", "true")));
    assertThat(result.get(6), is(descriptor("sub7", "Array[Object]", "", "true")));
    assertThat(result.get(7), is(descriptor("sub7[].sub1", "Array[Object]", "", "true")));
    assertThat(result.get(8), is(descriptor("sub7[].sub2", "Object", "", "true")));
    assertThat(result.get(9), is(descriptor("sub7[].sub3", "Array[Object]", "", "true")));
    assertThat(result.get(10), is(descriptor("sub7[].sub4", "Object", "", "true")));
    assertThat(result.get(11), is(descriptor("sub8", "Object", "", "true")));
    assertThat(result.get(12), is(descriptor("sub8.sub1", "Array[Object]", "", "true")));
    assertThat(result.get(13), is(descriptor("sub8.sub2", "Object", "", "true")));
    assertThat(result.get(14), is(descriptor("sub8.sub3", "Array[Object]", "", "true")));
    assertThat(result.get(15), is(descriptor("sub8.sub4", "Object", "", "true")));
}
 
@Test
public void testGenerateDocumentationForJacksonAnnotations() throws Exception {
    // given
    ObjectMapper mapper = createMapper();

    mockFieldComment(JsonAnnotations.class, "location", "A location");
    mockFieldComment(JsonAnnotations.class, "uri", "A uri");
    when(javadocReader.resolveMethodComment(JsonAnnotations.class, "getParameter"))
            .thenReturn("A parameter");
    mockFieldComment(JsonAnnotations.Meta.class, "headers", "A header map");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = JsonAnnotations.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(result.size(), is(4));
    // @JsonPropertyOrder puts it to first place
    assertThat(result.get(0), is(descriptor("uri", "String", "A uri", "true")));
    // @JsonProperty
    assertThat(result.get(1), is(descriptor("path", "String", "A location", "true")));
    // @JsonGetter
    assertThat(result.get(2), is(descriptor("param", "String", "A parameter", "true")));
    // @JsonUnwrapped
    assertThat(result.get(3), is(descriptor("headers", "Map", "A header map", "true")));
}
 
@Test
public void testGenerateDocumentationForFieldResolution() throws Exception {
    // given
    // different mapper for custom field resolution
    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
            .withFieldVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY));

    // comment on field directly
    mockFieldComment(FieldCommentResolution.class, "location", "A location");
    // comment on getter instead of field
    when(javadocReader.resolveMethodComment(FieldCommentResolution.class, "getType"))
            .thenReturn("A type");
    // comment on field instead of getter
    mockFieldComment(FieldCommentResolution.class, "uri", "A uri");
    mockFieldComment(FieldCommentResolution.class, "secured", "A secured flag");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = FieldCommentResolution.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(result.size(), is(4));
    // field comment
    assertThat(result.get(0), is(descriptor("location", "String", "A location", "true")));
    // getter comment
    assertThat(result.get(1), is(descriptor("type", "String", "A type", "true")));
    // field comment
    assertThat(result.get(2), is(descriptor("uri", "String", "A uri", "true")));
    assertThat(result.get(3), is(descriptor("secured", "Boolean", "A secured flag", "true")));
}
 
@Test
public void testGenerateDocumentationForConstraints() throws Exception {
    // given
    ObjectMapper mapper = createMapper();

    mockConstraint(ConstraintResolution.class, "location", "A constraint for location");
    mockConstraint(ConstraintResolution.class, "type", "A constraint for type");
    mockOptional(ConstraintResolution.class, "type", "false");
    mockOptional(ConstraintResolution.class, "params", "false");
    mockConstraint(ConstraintField.class, "value", "A constraint1 for value",
            "A constraint2 for value");
    mockOptional(ConstraintField.class, "value", "false");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = ConstraintResolution.class;

    // when
    List<ExtendedFieldDescriptor> fieldDescriptions = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(fieldDescriptions.size(), is(5));
    assertThat(fieldDescriptions.get(0),
            is(descriptor("location", "String", "", "true", "A constraint for location")));
    assertThat(fieldDescriptions.get(1),
            is(descriptor("type", "Integer", "", "false", "A constraint for type")));
    assertThat(fieldDescriptions.get(2),
            is(descriptor("params", "Array[Object]", "", "false")));
    assertThat(fieldDescriptions.get(3),
            is(descriptor("params[].value", "String", "", "false",
                    "A constraint1 for value", "A constraint2 for value")));
    assertThat(fieldDescriptions.get(4),
            is(descriptor("flags", "Array[Boolean]", "", "true")));
}
 
@Test
public void testGenerateDocumentationForPrimitiveTypes() throws Exception {
    // given
    ObjectMapper mapper = createMapper();
    mockFieldComment(PrimitiveTypes.class, "string", "A string");
    mockFieldComment(PrimitiveTypes.class, "bool", "A boolean");
    mockFieldComment(PrimitiveTypes.class, "number", "An integer");
    mockFieldComment(PrimitiveTypes.class, "decimal", "A decimal");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = PrimitiveTypes.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());
    // then
    assertThat(result.size(), is(4));
    assertThat(result.get(0), is(descriptor("string", "Array[String]", "A string", "true")));
    assertThat(result.get(1), is(descriptor("bool", "Boolean", "A boolean", "true")));
    assertThat(result.get(2), is(descriptor("number", "Integer", "An integer", "true")));
    assertThat(result.get(3), is(descriptor("decimal", "Decimal", "A decimal", "true")));

    // when change deserialization config
    mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, true);
    generator = new FieldDocumentationGenerator(mapper.writer(),
            mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
            SnippetTranslationManager.getDefaultResolver(), null);

    // when
    result = cast(generator.generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(result.size(), is(4));
    assertThat(result.get(0), is(descriptor("string", "Array[String]", "A string", "true")));
    assertThat(result.get(1), is(descriptor("bool", "Boolean", "A boolean", "false")));
    assertThat(result.get(2), is(descriptor("number", "Integer", "An integer", "false")));
    assertThat(result.get(3), is(descriptor("decimal", "Decimal", "A decimal", "false")));
}
 
@Test
public void testGenerateDocumentationForComposedTypes() throws Exception {
    // given
    ObjectMapper mapper = createMapper();
    mockFieldComment(ComposedTypes.class, "object", "An object");
    mockFieldComment(BasicTypes.class, "string", "A string");
    mockFieldComment(BasicTypes.class, "bool", "A boolean");
    mockFieldComment(BasicTypes.class, "number", "An integer");
    mockFieldComment(BasicTypes.class, "decimal", "A decimal");
    mockFieldComment(ComposedTypes.class, "array", "An array");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = ComposedTypes.class;

    // when
    List<ExtendedFieldDescriptor> result = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(result.size(), is(10));
    assertThat(result.get(0),
            is(descriptor("object", "Object", "An object", "true")));
    assertThat(result.get(1),
            is(descriptor("object.string", "String", "A string", "true")));
    assertThat(result.get(2),
            is(descriptor("object.bool", "Boolean", "A boolean", "true")));
    assertThat(result.get(3),
            is(descriptor("object.number", "Integer", "An integer", "true")));
    assertThat(result.get(4),
            is(descriptor("object.decimal", "Decimal", "A decimal", "true")));
    assertThat(result.get(5),
            is(descriptor("array", "Array[Object]", "An array", "true")));
    assertThat(result.get(6),
            is(descriptor("array[].string", "String", "A string", "true")));
    assertThat(result.get(7),
            is(descriptor("array[].bool", "Boolean", "A boolean", "true")));
    assertThat(result.get(8),
            is(descriptor("array[].number", "Integer", "An integer", "true")));
    assertThat(result.get(9),
            is(descriptor("array[].decimal", "Decimal", "A decimal", "true")));
}
 
@Test
public void testGenerateDocumentationForJacksonSubTypes() throws Exception {
    // given
    ObjectMapper mapper = createMapper();

    mockFieldComment(JsonType1.class, "name", "A name");
    mockFieldComment(JsonType1.class, "type", "A type");
    mockFieldComment(JsonType1.class, "base1", "A base 1");
    mockFieldComment(JsonType1.class, "base2", "A base 2");
    mockFieldComment(JsonType1.class, "base3", "A base 3");
    mockFieldComment(JsonType1.class, "base4", "A base 4");
    mockFieldComment(JsonType1SubType1.class, "base1Sub1", "A base 1 sub 1");
    mockFieldComment(JsonType1SubType2.class, "base1Sub2", "A base 1 sub 2");
    mockFieldComment(JsonType2.class, "clazz", "A clazz");
    mockFieldComment(JsonType2SubType1.class, "base2Sub1", "A base 2 sub 1");
    mockFieldComment(JsonType2SubType2.class, "base2Sub2", "A base 2 sub 2");
    mockTypeSpecifier(JsonType1SubType1.class, "[S1]");

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = JsonType1.class;

    // when
    List<ExtendedFieldDescriptor> fieldDescriptions = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(fieldDescriptions.size(), is(14));
    assertThat(fieldDescriptions.get(0),
            is(descriptor("type", "String", "A type", "true")));
    assertThat(fieldDescriptions.get(1),
            is(descriptor("name", "String", "A name", "true")));
    assertThat(fieldDescriptions.get(2),
            is(descriptor("base1", "Array[Object]", "A base 1", "true")));
    assertThat(fieldDescriptions.get(3),
            is(descriptor("base2", "Object", "A base 2", "true")));
    assertThat(fieldDescriptions.get(4),
            is(descriptor("base3", "Array[Object]", "A base 3", "true")));
    assertThat(fieldDescriptions.get(5),
            is(descriptor("base3[].clazz", "String", "A clazz", "true")));
    assertThat(fieldDescriptions.get(6),
            is(descriptor("base3[].base2Sub1", "String", "A base 2 sub 1", "true")));
    assertThat(fieldDescriptions.get(7),
            is(descriptor("base3[].base2Sub2", "String", "A base 2 sub 2", "true")));
    assertThat(fieldDescriptions.get(8),
            is(descriptor("base4", "Object", "A base 4", "true")));
    assertThat(fieldDescriptions.get(9),
            is(descriptor("base4.clazz", "String", "A clazz", "true")));
    assertThat(fieldDescriptions.get(10),
            is(descriptor("base4.base2Sub1", "String", "A base 2 sub 1", "true")));
    assertThat(fieldDescriptions.get(11),
            is(descriptor("base4.base2Sub2", "String", "A base 2 sub 2", "true")));
    assertThat(fieldDescriptions.get(12),
            is(descriptor("base1Sub1", "String", "A base 1 sub 1 [S1]", "true [S1]")));
    assertThat(fieldDescriptions.get(13),
            is(descriptor("base1Sub2", "String", "A base 1 sub 2", "true")));
}
 
@Test
public void testGenerateDocumentationForPlainSubTypes() throws Exception {
    // given
    ObjectMapper mapper = createMapper();

    mockFieldComment(Plain.class, "field", "A field");
    mockFieldComment(Plain.class, "overriddenField", "An overridden field");
    mockFieldComment(PlainX.class, "overriddenField", "Custom 1");
    mockFieldComment(PlainX.class, "x", "A field X");
    mockFieldComment(PlainY.class, "overriddenField", "Custom 2");
    mockFieldComment(PlainY.class, "y", "A field Y");
    mockTypeSpecifier(Plain.class, "");
    mockTypeSpecifier(PlainX.class, "(X)");
    mockTypeSpecifier(PlainY.class, "(Y)");
    mockOptional(Plain.class, "overriddenField", "true");
    mockOptional(PlainX.class, "overriddenField", "false");
    mockOptional(PlainY.class, "overriddenField", "false");
    mockConstraint(Plain.class, "overriddenField", "Size[1]");
    mockConstraint(PlainX.class, "overriddenField", "Size[x]");
    mockConstraint(PlainY.class, "overriddenField", "Size[y]");

    TypeMapping typeMapping = new TypeMapping();
    typeMapping.mapSubtypes(Plain.class, PlainX.class, PlainY.class);

    FieldDocumentationGenerator generator =
            new FieldDocumentationGenerator(mapper.writer(),
                    mapper.getDeserializationConfig(), javadocReader, constraintReader, typeMapping,
                    SnippetTranslationManager.getDefaultResolver(), null);
    Type type = Plain.class;

    // when
    List<ExtendedFieldDescriptor> fieldDescriptions = cast(generator
            .generateDocumentation(type, mapper.getTypeFactory()).values());

    // then
    assertThat(fieldDescriptions.size(), is(4));
    assertThat(fieldDescriptions.get(0),
            is(descriptor("field", "String", "A field", "true")));
    assertThat(fieldDescriptions.get(1),
            is(descriptor("overriddenField", "String",
                    "An overridden field<br>Custom 1 (X)<br>Custom 2 (Y)",
                    Arrays.asList("true", "false (X)", "false (Y)"),
                    "Size[1]", "Size[x] (X)", "Size[y] (Y)")));
    assertThat(fieldDescriptions.get(2),
            is(descriptor("x", "String", "A field X (X)", "true (X)")));
    assertThat(fieldDescriptions.get(3),
            is(descriptor("y", "String", "A field Y (Y)", "true (Y)")));
}