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
, это должно быть решение, которое вы хотите.
Здесь - справочный документ.
Ответ 3
Вы можете использовать заполнитель при объявлении bean в файле конфигурации. Здесь вы можете попробовать пример:
https://www.mkyong.com/spring/spring-propertyplaceholderconfigurer-example/
Ответ 4
Если вы используете Spring Boot, вы можете попробовать этот метод, не делая никакой специальной конфигурации
@environment.getProperty('property')