#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/… ) имеет смысл, и я не могу понять, почему это не работает