Я хотел бы избежать необходимости ставить перед моими атрибутами префикс @JsonProperty("property_name")
и вместо этого просто настроить сборщик Spring WebClient для преобразования всех змеиных случаев в верблюжьи случаи.
Это возможно?
Я хотел бы избежать необходимости ставить перед моими атрибутами префикс @JsonProperty("property_name")
и вместо этого просто настроить сборщик Spring WebClient для преобразования всех змеиных случаев в верблюжьи случаи.
Это возможно?
Прочтите 9.4.3 . Настройте Jackson ObjectMapper и 10. .А.4. Свойства JSON, чтобы знать, сколько опций мы можем определить из файла конфигурации. В вашем случае нужно установить:
spring.jackson.property-naming-strategy=SNAKE_CASE
Если вы хотите изменить конфигурацию только для десериализации, вам нужно настроить способ создания 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();
}
}
Видеть:
Вы можете добавить аннотацию к вашему классу модели:
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class Model {
String camelCase; //will be camel_case in json
}
Вы можете либо последовать этому совету и применить конфигурацию только для одной модели.
Или вы можете настроить его глобально через соответствующее свойство:
spring:
jackson:
property-naming-strategy: SNAKE_CASE