Change order of loggingCodecCustomizer

It is set to 0 so that users' customizers can be positioned before and
after it.

Fixes gh-14723
This commit is contained in:
Madhura Bhave 2018-10-11 13:40:57 -07:00
parent 237ea1d6ee
commit ff35d14170
2 changed files with 45 additions and 40 deletions

View File

@ -20,20 +20,15 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionMessage;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.boot.autoconfigure.http.HttpProperties;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.codec.CodecCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.core.annotation.Order;
import org.springframework.http.codec.CodecConfigurer;
import org.springframework.http.codec.json.Jackson2JsonDecoder;
import org.springframework.http.codec.json.Jackson2JsonEncoder;
@ -77,7 +72,7 @@ public class CodecsAutoConfiguration {
static class LoggingCodecConfiguration {
@Bean
@Conditional(LogRequestDetailsConfiguredCondition.class)
@Order(0)
public CodecCustomizer loggingCodecCustomizer(HttpProperties properties) {
return (configurer) -> configurer.defaultCodecs()
.enableLoggingRequestDetails(properties.isLogRequestDetails());
@ -85,23 +80,4 @@ public class CodecsAutoConfiguration {
}
static class LogRequestDetailsConfiguredCondition extends SpringBootCondition {
@Override
public ConditionOutcome getMatchOutcome(ConditionContext context,
AnnotatedTypeMetadata metadata) {
ConditionMessage.Builder message = ConditionMessage
.forCondition("Log Request Details");
String property = context.getEnvironment()
.getProperty("spring.http.log-request-details");
if (property == null) {
return ConditionOutcome.noMatch(message.because(
"did not find spring.http.log-request-details property"));
}
return ConditionOutcome
.match(message.because("spring.http.log-request-details property"));
}
}
}

View File

@ -15,14 +15,18 @@
*/
package org.springframework.boot.autoconfigure.http.codec;
import java.lang.reflect.Method;
import org.junit.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.http.HttpProperties;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.boot.web.codec.CodecCustomizer;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.http.codec.CodecConfigurer;
import org.springframework.http.codec.support.DefaultClientCodecConfigurer;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.util.ReflectionUtils;
import static org.assertj.core.api.Assertions.assertThat;
@ -38,23 +42,48 @@ public class CodecsAutoConfigurationTests {
@Test
public void autoConfigShouldProvideALoggingRequestDetailsCustomizer() {
this.contextRunner.withPropertyValues("spring.http.log-request-details=false")
.run((context) -> {
CodecCustomizer customizer = context.getBean(CodecCustomizer.class);
CodecConfigurer configurer = new DefaultClientCodecConfigurer();
customizer.customize(configurer);
boolean enableLoggingRequestDetails = (boolean) ReflectionTestUtils
.getField(configurer.defaultCodecs(),
"enableLoggingRequestDetails");
assertThat(enableLoggingRequestDetails).isFalse();
});
this.contextRunner.run((context) -> {
CodecCustomizer customizer = context.getBean(CodecCustomizer.class);
CodecConfigurer configurer = new DefaultClientCodecConfigurer();
customizer.customize(configurer);
assertThat(configurer.defaultCodecs())
.hasFieldOrPropertyWithValue("enableLoggingRequestDetails", false);
});
}
@Test
public void autoConfigWhenLoggingRequestDetailsPropertyNotSetShouldNotProvideCustomizer() {
this.contextRunner.run(
(context) -> assertThat(context).doesNotHaveBean(CodecCustomizer.class));
public void loggingRequestDetailsCustomizerShouldUseHttpProperties() {
this.contextRunner.withPropertyValues("spring.http.log-request-details=true")
.run((context) -> {
CodecCustomizer customizer = context.getBean(CodecCustomizer.class);
CodecConfigurer configurer = new DefaultClientCodecConfigurer();
customizer.customize(configurer);
assertThat(configurer.defaultCodecs()).hasFieldOrPropertyWithValue(
"enableLoggingRequestDetails", true);
});
}
@Test
public void loggingRequestDetailsBeanShouldHaveOrderZero() {
this.contextRunner.run((context) -> {
Method customizerMethod = ReflectionUtils.findMethod(
CodecsAutoConfiguration.LoggingCodecConfiguration.class,
"loggingCodecCustomizer", HttpProperties.class);
Integer order = new TestAnnotationAwareOrderComparator()
.findOrder(customizerMethod);
assertThat(order).isEqualTo(0);
});
}
static class TestAnnotationAwareOrderComparator
extends AnnotationAwareOrderComparator {
@Override
public Integer findOrder(Object obj) {
return super.findOrder(obj);
}
}
}