как читать сообщения. свойства в аннотации - PullRequest
0 голосов
/ 25 января 2019

Я хочу использовать локализацию для локализации документации Swagger. Но я могу предоставить только константы времени компиляции для аннотаций. Поэтому я не совсем понимаю, как предоставлять сообщения для чтения из сообщений _ **. Свойств и предоставлять их для аннотаций.

Источник сообщения :

@Configuration
public class CustomMessageSourceConfig {

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Bean
    public LocalValidatorFactoryBean getValidator() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(messageSource());
        return bean;
    }

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.ENGLISH);
        return slr;
    }

}

Чтение сообщений из сообщений _ **. Свойства:

@Component
public class MessagesByLocaleServiceImpl implements MessagesByLocaleService {

    @Autowired
    private MessageSource messageSource;

    @Override
    public String getMessage(String id) {
        Locale locale = LocaleContextHolder.getLocale();
        return StringEscapeUtils.unescapeJava(messageSource.getMessage(id, null, locale));
    }
}

Вот как я читаю сообщения в коде Java:

@Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot"))).build()
                .apiInfo(apiInfo())
                .tags(new Tag("Netmap Mode Service", messageSource.getMessage(MessageCodes.SWAGGER_WINDOWS_ONLY)));
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title(messageSource.getMessage(MessageCodes.SWAGGER_TITLE))
                .description(messageSource.getMessage(MessageCodes.SWAGGER_DESCRIPTION))
                .contact(messageSource.getMessage(MessageCodes.SWAGGER_CONTACT)).build();
    }

Но как я могу предоставить эти сообщения аннотациям Swagger?

@ApiOperation(value = "Add Netmap mode ", notes = "**I want to read properties here**")
    @ApiImplicitParams({
            @ApiImplicitParam(value = SwaggerSinglePoint.DESC_MODE_NAME, dataType = CDSwaggerPrimitives.STRING, name = SwaggerSinglePoint.MODE_NAME, paramType = CDSwaggerPrimitives.PARAMA_TYPE_QUERY),
            @ApiImplicitParam(value = SwaggerSinglePoint.DESC_MODE_BUFFER_SIZE, dataType = CDSwaggerPrimitives.INETEGER, name = SwaggerSinglePoint.BUFFER, paramType = CDSwaggerPrimitives.PARAMA_TYPE_QUERY)})
    @RequestMapping(method = RequestMethod.POST, produces = CDConstants.JSON_RESPONSE_DATA_FORMAT, consumes = CDConstants.JSON_REQUEST_DATA_FORMAT)
    @SuppressWarnings({ "squid:S3776", "squid:S1319", "unused" })
    public String testController(@RequestBody(required = false) HashMap requestParamMap, HttpServletResponse response,
            HttpServletRequest request) {

Я хочу читать сообщения в этих аннотациях. Любые рекомендации или предложения будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Всегда лучше отделить комментарии к документации от вашего кода (чтение текста из внешнего файла свойств, а не вставка в виде простого текста)

Используйте заполнитель вот так, вместо

@ApiOperation(value = "Add Netmap mode " ,...)

использование

@ApiOperation(value = ${message.addNetMode} ,...)

Здесь внутри файла "messages _ **. Properties" должна быть пара ключ-значение

message.addNetMode=Add Netmap mode

Также зарегистрируйте файл свойств в вашей конфигурации на уровне класса

@PropertySource("classpath:messages_**.properties")

** Обратите внимание, что значения для некоторых аннотаций могут не поддерживаться. См. Документы http://springfox.github.io/springfox/docs/current/#support-for-documentation-from-property-file-lookup

0 голосов
/ 25 января 2019

Вы можете получить значения из application.properties, используя SPEL т.е. ${}:

@ Annotation (value = "$ {request.reminder.mails.cron.expression}")

Примечание: - имя реквизита должно быть полным именем от application.properties.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...