Spring загрузить внешние свойства/сообщения конфигурации в аннотациях Java

Есть ли способ прочитать текст из файла внешних свойств в spring без использования аннотации @Value. Пример: application.properties

var.foo="hello"

Я могу ввести его в spring bean, используя

@Value("${var.foo}") String value;

как переменная класса. Есть ли способ включить это свойство без использования аннотации @Value. Что-то вроде проверки JSR bean.

@NotNull(message={custom.notnull})

и вы внесете значение этого значения в файле ValidationMessages.properties.

Например, если у меня есть ресурс (веб-компонент), и если мне нужно использовать аннотации Swagger для документирования,

@controller
@path("/")
@Api(description = "User Resource API")
public class UserResource {

    @Path("/users")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation(value = "returns user details", notes = "some notes")
    public User getUser() {

        return new User(123, "Joe", "Montana");
    }
}

и модель,

@ApiModel("user model")
public class User {

    @ApiModelProperty(value = "This represents user id")
    private String id;
    private String firstName;
    private String lastName;
    ...
}

Как вы экрнализуете эту строку/предложения/сообщения во внешний файл свойств. Я думаю, что это относится к общим аннотациям Java и spring, а не к Swagger. Причина, по которой я указал Swagger, заключается в том, что, как и в случае с гибернативной проверкой, библиотека Java имеет возможность указывать эти сообщения во внешнем файле ValidationMessages.properties и spring знает по умолчанию, чтобы выбрать его (или его можно настроить).

Предоставляет ли Swagger такой вариант? Если это не так, как мне настроить?

Основная проблема заключается в том, что я не хочу загромождать свой код/​​логику данными, связанными с документацией (метаданные).

Ответ 1

Я не думаю, что вы можете достичь этого, если базовая реализация аннотаций, которые вы используете, не имеет собственного стандарта для i18n (например, ValidationMessages.properties) или поддерживает Spring MessageSource.

В случае последней альтернативы все, что вам нужно сделать, это добавить ваши пары ключ/значение внутри файла messages.properties и позволить остальной структуре:

messages.properties

my.validation.error.message=Something went terribly wrong!

SomeClass.java

@MySpringCompatibleValidationAnnotation("my.validation.error.message")
private String someVariable;

Нижняя строка, в зависимости от используемой структуры, может или не может поддерживать этот готовый вариант.

Теперь, что касается Swagger, поддержка документации для i6n была предложена в качестве новой функции, но она была закрыта или приостановлена, в то время как они задумались над тем, как она должна быть реализована. Подробнее см. https://github.com/OAI/OpenAPI-Specification/issues/274.

Ответ 2

Использование аннотации @Value("${property}") для добавления свойств конфигурации иногда может быть громоздким, поэтому spring boot ввел @ConfigurationProperties, это должно быть решение, которое вы хотите.

Здесь - справочный документ.

Ответ 4

Если вы используете Spring Boot, вы можете попробовать этот метод, не делая никакой специальной конфигурации

@environment.getProperty('property')