Use @AliasFor in @AutoConfigureRestDocs
Replace custom alias logic in @AutoConfigureRestDocs with @AliasFor. Closes gh-6403
This commit is contained in:
parent
c889c09066
commit
c265de2535
|
@ -25,6 +25,7 @@ import java.lang.annotation.Target;
|
|||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
import org.springframework.boot.test.autoconfigure.properties.PropertyMapping;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
/**
|
||||
* Annotation that can be applied to a test class to enable and configure
|
||||
|
@ -46,17 +47,19 @@ import org.springframework.context.annotation.Import;
|
|||
public @interface AutoConfigureRestDocs {
|
||||
|
||||
/**
|
||||
* The output directory to which generated snippets will be written. A synonym for
|
||||
* The output directory to which generated snippets will be written. A alias for
|
||||
* {@link #outputDir}.
|
||||
* @return the output directory
|
||||
*/
|
||||
@AliasFor("outputDir")
|
||||
String value() default "";
|
||||
|
||||
/**
|
||||
* The output directory to which generated snippets will be written. A synonym for
|
||||
* The output directory to which generated snippets will be written. A alias for
|
||||
* {@link #value}.
|
||||
* @return the output directory
|
||||
*/
|
||||
@AliasFor("value")
|
||||
String outputDir() default "";
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,38 +24,26 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
|||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||
import org.springframework.core.type.AnnotationMetadata;
|
||||
import org.springframework.restdocs.ManualRestDocumentation;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* {@link ImportBeanDefinitionRegistrar} used by {@link AutoConfigureRestDocs}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @see AutoConfigureRestDocs
|
||||
*/
|
||||
class RestDocumentationContextProviderRegistrar implements ImportBeanDefinitionRegistrar {
|
||||
|
||||
@Override
|
||||
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
|
||||
BeanDefinitionRegistry registry) {
|
||||
Map<String, Object> annotationAttributes = importingClassMetadata
|
||||
.getAnnotationAttributes(AutoConfigureRestDocs.class.getName());
|
||||
String outputDir = (String) annotationAttributes.get("outputDir");
|
||||
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(ManualRestDocumentation.class)
|
||||
.addConstructorArgValue(determineOutputDir(importingClassMetadata))
|
||||
.getBeanDefinition();
|
||||
.addConstructorArgValue(outputDir).getBeanDefinition();
|
||||
registry.registerBeanDefinition(ManualRestDocumentation.class.getName(),
|
||||
beanDefinition);
|
||||
}
|
||||
|
||||
private String determineOutputDir(AnnotationMetadata annotationMetadata) {
|
||||
Map<String, Object> annotationAttributes = annotationMetadata
|
||||
.getAnnotationAttributes(AutoConfigureRestDocs.class.getName());
|
||||
String outputDir = (String) annotationAttributes.get("outputDir");
|
||||
if (!StringUtils.hasText(outputDir)) {
|
||||
outputDir = (String) annotationAttributes.get("value");
|
||||
if (!StringUtils.hasText(outputDir)) {
|
||||
throw new IllegalStateException(
|
||||
"Either value or outputDir must be specified on @AutoConfigureRestDocs");
|
||||
}
|
||||
}
|
||||
return outputDir;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
|
|||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@WebMvcTest(controllers = RestDocsTestController.class, secure = false)
|
||||
@AutoConfigureRestDocs(outputDir = "target/generated-snippets")
|
||||
@AutoConfigureRestDocs("target/generated-snippets")
|
||||
public class RestDocsAutoConfigurationAdvancedConfigurationIntegrationTests {
|
||||
|
||||
@Before
|
||||
|
|
Loading…
Reference in New Issue