目前我有一个带有 Jackson 库的简约Spring / Netty、Reactor / Web Flux项目
@Configuration
public class EmbeddedSpringServer extends DelegatingWebFluxConfiguration {
@Bean
MyController controller() {
return new AdminController();
}
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(EmbeddedSpringServer.class);
HttpHandler handler = WebHttpHandlerBuilder.applicationContext(applicationContext).build();
ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(handler);
HttpServer.create("0.0.0.0", 8082).newHandler(adapter).subscribe();
applicationContext.registerShutdownHook();
}
}
构建.gradle:
compile 'org.springframework:spring-context:5.0.2.RELEASE'
compile 'org.springframework:spring-web:5.0.2.RELEASE'
compile 'org.springframework:spring-webflux:5.0.2.RELEASE'
compile 'io.projectreactor.ipc:reactor-netty:0.7.2.RELEASE'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.3'
控制器类工作正常(它返回Mono<>
一个 DTO 类型)。因为 Jackson 存在于类路径中,所以Web Flux会自动创建一个 Object Mapper 实例,DefaultServerCodecConfigurer
但是不清楚如何覆盖对象映射器实例,因为大多数Web Flux配置类都是包私有的。
我想要实现的是创建自己的对象映射器以添加在jackson-modules-java8
LocalDateTime
中实现的自定义序列化
ObjectMapper mapper = new ObjectMapper()
.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule())
;
问题是不清楚如何修改Jackson2JsonEncoder
在包 private 中创建的org.springframework.http.codec.support.AbstractCodecConfigurer.AbstractDefaultCodecs
。