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.autoconfigure.ImportAutoConfiguration;
|
||||||
import org.springframework.boot.test.autoconfigure.properties.PropertyMapping;
|
import org.springframework.boot.test.autoconfigure.properties.PropertyMapping;
|
||||||
import org.springframework.context.annotation.Import;
|
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
|
* 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 {
|
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}.
|
* {@link #outputDir}.
|
||||||
* @return the output directory
|
* @return the output directory
|
||||||
*/
|
*/
|
||||||
|
@AliasFor("outputDir")
|
||||||
String value() default "";
|
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}.
|
* {@link #value}.
|
||||||
* @return the output directory
|
* @return the output directory
|
||||||
*/
|
*/
|
||||||
|
@AliasFor("value")
|
||||||
String outputDir() default "";
|
String outputDir() default "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -24,38 +24,26 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||||
import org.springframework.core.type.AnnotationMetadata;
|
import org.springframework.core.type.AnnotationMetadata;
|
||||||
import org.springframework.restdocs.ManualRestDocumentation;
|
import org.springframework.restdocs.ManualRestDocumentation;
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link ImportBeanDefinitionRegistrar} used by {@link AutoConfigureRestDocs}.
|
* {@link ImportBeanDefinitionRegistrar} used by {@link AutoConfigureRestDocs}.
|
||||||
*
|
*
|
||||||
* @author Andy Wilkinson
|
* @author Andy Wilkinson
|
||||||
|
* @see AutoConfigureRestDocs
|
||||||
*/
|
*/
|
||||||
class RestDocumentationContextProviderRegistrar implements ImportBeanDefinitionRegistrar {
|
class RestDocumentationContextProviderRegistrar implements ImportBeanDefinitionRegistrar {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
|
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
|
||||||
BeanDefinitionRegistry registry) {
|
BeanDefinitionRegistry registry) {
|
||||||
|
Map<String, Object> annotationAttributes = importingClassMetadata
|
||||||
|
.getAnnotationAttributes(AutoConfigureRestDocs.class.getName());
|
||||||
|
String outputDir = (String) annotationAttributes.get("outputDir");
|
||||||
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder
|
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder
|
||||||
.genericBeanDefinition(ManualRestDocumentation.class)
|
.genericBeanDefinition(ManualRestDocumentation.class)
|
||||||
.addConstructorArgValue(determineOutputDir(importingClassMetadata))
|
.addConstructorArgValue(outputDir).getBeanDefinition();
|
||||||
.getBeanDefinition();
|
|
||||||
registry.registerBeanDefinition(ManualRestDocumentation.class.getName(),
|
registry.registerBeanDefinition(ManualRestDocumentation.class.getName(),
|
||||||
beanDefinition);
|
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)
|
@RunWith(SpringRunner.class)
|
||||||
@WebMvcTest(controllers = RestDocsTestController.class, secure = false)
|
@WebMvcTest(controllers = RestDocsTestController.class, secure = false)
|
||||||
@AutoConfigureRestDocs(outputDir = "target/generated-snippets")
|
@AutoConfigureRestDocs("target/generated-snippets")
|
||||||
public class RestDocsAutoConfigurationAdvancedConfigurationIntegrationTests {
|
public class RestDocsAutoConfigurationAdvancedConfigurationIntegrationTests {
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
|
Loading…
Reference in New Issue