我有一个Lib-A,它依赖于com.atlassian.oai:swagger-request-validator-core.此依赖项有一个属性文件messages.properties。
我有一个应用程序-A,它依赖于Lib。如果我把messages.properties文件放在App中,我可以覆盖属性,但是如果我将它放在Lib中,它就不会覆盖。我如何覆盖Lib-A的属性?
发布于 2021-11-11 16:50:03
简单的农民:
如果删除/重命名/移动messages.properties,就会得到(原始的) No API path found that matches request 'bar'
。
也就是说,只需将文件放置在正确的位置(classpath:/swagger/validation/messages.properties
),就可以更改(默认) MessageResolver
的消息。
Edit1:
我认为这将“始终有效”,因为bin/目标文件夹中的文件将优先于“jars中的资源”,但它取决于类路径/-加载程序/执行细节。但是在这种情况下,在“您的jvm”中创建的任何(默认的) MessageResolver都会更喜欢这个/ messages.properties
。
如果这样做,请确保所有键在 messages.properties
(+ match count(&semantics))中可用,因为在尝试以下操作时:
// message key not present in (our!) swagger/validation/messages.properties
log.info("got other message: {}",
mr.get("validation.request.operation.notAllowed", "foo", "bar")
);
,我们得到;(:
[com.example.demo.Main.main()] INFO com.example.demo.Main - got other message: null
Edit2:
与(实际上)覆盖/替换(默认)“资源包”不同,您还可以通过添加语言、国家、平台特定消息(但仍然返回到默认消息)来获得所有的“继承和回退魔法”。
示例性文件夹结构:
demo
--src
----main
------resources
--------swagger
----------validation
------------messages_en_GB.properties
------------messages_en_US.properties
------------messages_en.properties
------------messages_de.properties
------------...
另请参阅:
Edit3:
我得到了它(替换为“had”)也在处理一个临时依赖关系,但我必须确保:
demo
是唯一的(直接)依赖项。swagger-request-validator-core
之前。这听起来不太可靠,但这正是我所发现/测试的。
和"beyond maven“(对不起使用了它),我们可以说:带有自定义消息的依赖项应该出现在swagger-request-validator-core.jar
之前的类路径中
发布于 2021-11-11 14:09:57
你能试试这个吗?(未测试) ->
public class CustomMessageResolver extends MessageResolver{
private final ResourceBundle customMessages = ResourceBundle.getBundle("MYPATH/custom_messages");
public ValidationReport.Message get(@Nonnull final String key, final Object... args) {
requireNonNull(key, "A message key is required.");
final ValidationReport.Level level = levelResolver.getLevel(key);
if (!customMessages.containsKey(key)) {
log.warn("No message key found for '{}'", key);
return null;
}
return new ImmutableMessage(key, level, format(customMessages.getString(key), args));
}
}
https://stackoverflow.com/questions/69928806
复制相似问题