Приложение администратора Spring Boot — использование функции instanceexchangefilter для преобразования snake_case в camel case для пользовательского интерфейса

#java #camelcasing #spring-boot-admin #filterfunction #snakecasing

Вопрос:

У меня есть клиентский api, который использует стратегию именования прецедентов змеи (пользовательский объект). Все настроено правильно и отлично работает, но, конечно, некоторые элементы пользовательского интерфейса SBA( версия 2.3.1) работают неправильно(показатели, env…). Я попытался реализовать функцию instanceexchangefilter для преобразования случая змеи в случай верблюда для пользовательского интерфейса, но безуспешно. Я был бы признателен, если бы кто-нибудь мог предоставить пример того, как это сделать правильно. Если я правильно понял, я предполагаю перехватить запрос клиента и обработать его в случае верблюда, и я не знаю, как это сделать. Спасибо


     ...
    <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, но затем интерфейсное приложение не работает.

 @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);

            }}
    }
 

Ответ №1:

Более или менее, следующая проблема GitHub решает эту проблему с помощью глобального преобразователя JSON , который используется для всех конечных точек, и преобразователя JSON привода для конечных точек привода, соответствующих ответу Content-Type , например, application/vnd.spring-boot.actuator.v3 json . Вы указываете оба компонента в клиентском приложении.

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

Обратите внимание, что после весенней загрузки 2.5.0 приложение ActuatorMediaType устарело ApiVersion .

Комментарии:

1. Спасибо вам за ваш ответ. Я перепробовал все это, но, похоже, у меня ничего не получается. В любом случае, спасибо тебе.

2. У меня была та же самая проблема с пользовательским интерфейсом администратора Spring Boot, и упомянутый подход разрешил ее.

3. Да, это решает пользовательский интерфейс SBA, но, к сожалению, тогда интерфейсное приложение работает не так, как предполагалось.

4. Использует ли ваше интерфейсное приложение конечные точки привода?

5. Он их не использует. Итак, ваше предложение ( github.com/codecentric/spring-boot-admin/issues/… ) имеет смысл, и я не могу понять, почему это не работает