Webclient + Jackson:如何设置反序列化将snake_case 转换为camelCase?

bpe*_*ira 2 java jackson spring-webclient

我想避免必须为我的属性加上前缀@JsonProperty("property_name"),而只是设置 Spring WebClient 构建器以将所有 snake_cases 转换为 camelCases。

那可能吗?

Mic*_*ber 5

阅读9.4.3。自定义 Jackson ObjectMapper10.A.4。JSON 属性,以了解我们可以从配置文件中定义多少个选项。在您的情况下,您需要设置:

spring.jackson.property-naming-strategy=SNAKE_CASE
Run Code Online (Sandbox Code Playgroud)

如果您只想为反序列化更改配置,则需要自定义WebClient创建方式。

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.codec.json.Jackson2JsonDecoder;
import org.springframework.web.reactive.function.client.ExchangeStrategies;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfiguration {

    @Bean
    public WebClient webClient(ObjectMapper baseConfig) {
        ObjectMapper newMapper = baseConfig.copy();
        newMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);

        ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder()
                .codecs(configurer ->
                        configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(newMapper)))
                .build();
        return WebClient.builder()
                .baseUrl("http://localhost:8080")
                .exchangeStrategies(exchangeStrategies)
                .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

看: