Вопрос почти старый, я не знаю, нашли ли вы решение.
В любом месте вы можете создать полностью настраиваемую информацию профилирования ALPS, если вы создадите два настраиваемых преобразователя, которые заменяют преобразователи, используемые Spring.
Первым необходимо расширить преобразователь org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter
.
Вот возможная реализация:
public class CustomAlpsJsonHttpMessageConverter extends AlpsJsonHttpMessageConverter {
public CustomAlpsJsonHttpMessageConverter(RootResourceInformationToAlpsDescriptorConverter converter) {
super(converter);
}
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
return super.canWrite(clazz, mediaType);
}
@Override
public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType) {
return super.canRead(type, contextClass, mediaType);
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
ServerHttpResponse response) {
return super.beforeBodyWrite(body, returnType, selectedContentType, selectedConverterType, request, response);
}
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
if (converterType.equals(AlpsJsonHttpMessageConverter.class))
return true;
else if (converterType.equals(CustomAlpsJsonHttpMessageConverter.class))
return true;
else return false;
}
}
Второй должен расширяет преобразователь org.springframework.data.rest.webmvc.alps.RootResourceInformationToAlpsDescriptorConverter
.
У RootResourceInformationToAlpsDescriptorConverter
только два открытых ресурса: конструктор и метод «конвертировать».
Вы можете перезаписать каждое отдельное поле/метод этого класса, если вы хотите иметь настраиваемое поведение.
Обратите внимание, что «поддерживает» метод вашего CustomAlpsJsonHttpMessageConverter
нужно будет соответствует данному «converterType» с новым CustomAlpsJsonHttpMessageConverter
класса.
В этот момент вы можете настроить «преобразовать» метод класса RootResourceInformationToAlpsDescriptorConverter
, просто ovverriding его в CustomRootResourceInformationToAlpsDescriptorConverter
.
Наконец, вы должны зарегистрировать два преобразователя в контексте приложения. Для этого вы можете расширить класс RepositoryRestMvcConfiguration
, а в вашем CustomRepositoryRestMvcConfiguration
вам понадобится @Override
методы "alpsJsonHttpMessageConverter()"
и "alpsConverter()"
.
Добавить также @Bean
аннотацию в двух ovverriding пользовательских методов, например:
@Bean
@Override
public AlpsJsonHttpMessageConverter alpsJsonHttpMessageConverter() {
return new CustomAlpsJsonHttpMessageConverter(alpsConverter());
}
@Bean
@Override
public RootResourceInformationToAlpsDescriptorConverter alpsConverter() {
Repositories repositories = repositories();
PersistentEntities persistentEntities = persistentEntities();
RepositoryEntityLinks entityLinks = entityLinks();
MessageSourceAccessor messageSourceAccessor = resourceDescriptionMessageSourceAccessor();
RepositoryRestConfiguration config = config();
ResourceMappings resourceMappings = resourceMappings();
return new CustomRootResourceInformationToAlpsDescriptorConverter(associationLinks(), repositories, persistentEntities,
entityLinks, messageSourceAccessor, config, objectMapper(), enumTranslator());
}
Таким образом, вы можете иметь полностью настраиваемой ALPS, если вам нужно.
Я пробовал это решение для создания пользовательских профилирующих ссылок, и он отлично работает.
спасибо! Я больше не работаю над проектом, и мы закончили иметь внешний документ для этого, отрезав «красоту» объясняемого себя API В любом случае, я свяжу ваш ответ с моими бывшими командами, чтобы они поняли о том, что нужно сделать, чтобы вернуться к более чистой документации. –