【问题标题】:Spring Boot Admin application - use of InstanceExchangeFilterFunction to convert snake_case to camel case for UISpring Boot Admin 应用程序 - 使用 InstanceExchangeFilterFunction 将蛇形大小写转换为 UI 的驼峰形大小写
【发布时间】:2021-09-14 12:08:48
【问题描述】:

我有一个使用蛇案例命名策略(自定义 ObjectMapper)的客户端 api。一切都已正确设置并且运行良好,但当然 SBA(2.3.1 版)UI 的某些内容无法正常工作(指标、环境...)。我尝试实现 InstanceExchangeFilterFunction 以将蛇形大小写转换为 UI 的骆驼形大小写,但没有成功。如果有人可以提供如何正确执行此操作的示例,我将不胜感激。 如果我理解正确,我想拦截客户端请求,并将其处理为驼峰式,我不知道该怎么做。 谢谢


    ...
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sba</groupId>
    <artifactId>SpringBootAdmin</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBootAdmin</name>
    <description>SpringBootAdmin</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-boot-admin.version>2.3.1</spring-boot-admin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        ...

@Import({SecurityConfig.class})
@Configuration
@EnableAdminServer
@SpringBootApplication
public class SpringBootAdminApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminApplication.class, args);
    }
}


@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public InstanceExchangeFilterFunction caseStrategy(List<HttpMessageConverter<?>> converters) {

        for(HttpMessageConverter<?> converter : converters) {
            if(converter instanceof MappingJackson2HttpMessageConverter) {
                MappingJackson2HttpMessageConverter jsonMessageConverter = (MappingJackson2HttpMessageConverter) converter;
                ObjectMapper objectMapper = jsonMessageConverter.getObjectMapper();
                ((MappingJackson2HttpMessageConverter) converter).setObjectMapper(objectMapper);

            }
        }
        return (instance, request, next) -> next.exchange(request);
    }
}

我也试过这段代码,它可以解析 SBA UI,但是前端应用程序不起作用。

@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
   for (HttpMessageConverter<?> converter : converters) {
       if (converter instanceof MappingJackson2HttpMessageConverter) {
           MappingJackson2HttpMessageConverter jsonMessageConverter = (MappingJackson2HttpMessageConverter) converter;
           ObjectMapper objectMapper = jsonMessageConverter.getObjectMapper();
           objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

            }}
    }

【问题讨论】:

    标签: java camelcasing spring-boot-admin filterfunction snakecasing


    【解决方案1】:

    或多或少,以下 GitHub 问题通过用于所有端点的全局 JSON 转换器和响应 Content-Type 匹配的执行器端点的执行器 JSON 转换器解决了这个问题,例如,application/vnd.spring-boot.actuator.v3+json。您在客户端应用程序中指定这两个 bean。

    https://github.com/codecentric/spring-boot-admin/issues/751#issuecomment-575999785

    请注意,在 Spring Boot 2.5.0 之后,ActuatorMediaType 已被 ApiVersion 弃用。

    【讨论】:

    • 感谢您的回答。我尝试了所有这些,但似乎没有什么对我有用。还是谢谢你。
    • 我在 Spring Boot Admin UI 上遇到了同样的问题,上述方法解决了它。
    • 是的,它解决了 SBA UI,但不幸的是,前端应用程序并不能像想象的那样工作。
    • 您的前端应用程序是否使用执行器端点?
    • 它不使用它们。所以你的建议 (github.com/codecentric/spring-boot-admin/issues/…) 非常有道理,我不明白为什么它不起作用
    猜你喜欢
    • 2016-08-07
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2014-10-30
    • 1970-01-01
    相关资源
    最近更新 更多