[spring-projects/spring-boot]允许地图绑定使用未转义字符

2024-04-23 665 views
8

Spring boot版本: 2.0.2(1.5.13正常)

问题描述:

如果map key带有“/”,则无法正常解析。其他都正常。

例子:

application.yml 

shiro:
  testMap:
    /test1: test1
    /test2: test2

配置类

@Data
@ConfigurationProperties(prefix="shiro")
public class ShiroProperties {
    private Map<String,String> testMap;
}

测试班

@Transactional
@RunWith(SpringRunner.class)
@SpringBootTest(classes=DataManage.class)
public class ShiroTest extends BaseTransactionalTest{

    @Autowired
    private ShiroProperties shiroConfig;

    @Test
    public void read() {
        System.out.println(shiroConfig.toString());
    }

}

控制台信息:

ShiroProperties(testMap={test1=test1, test2=test2})

回答

2

新的活页夹对属性名称更加严格,这意味着您需要将它们括在方括号中。请尝试以下操作:

shiro:
  testMap:
    "[/test1]": test1
    "[/test2]": test2
2

我想知道是否有任何方法可以使其更加用户友好。我已标记该问题以供下次电话会议讨论。

3

谢谢你!按照你的建议可以正常使用,希望官方文档中有相关示例...

0

我们也许能够得到原始密钥EntryBinder

3

这也让我在迁移到 2.0 时遇到了麻烦,因为我有 URL 作为键,比如:

myapp
  serviceUrls:
    'https://example.org/test': 'https://test.example.org/Endpoint'

以前在 1.5 上运行得很好。发现这个问题后,我将这张地图更改为:

'[https://example.org/test]': 'https://test.example.org/Endpoint'

现在它解析正确了。请在迁移指南或参考文档中明确记录这一点。

9

@edysli 已经有一个关于 #13506 的问题,在您的评论上方有一个参考。

0

@snicoll 是的,我看到了,我只是不知道哪一个最适合托管我的“我也是”示例,所以我选择了最低的 id...:wink: 我可以将我的评论移至 #13506,如果更少的话凌乱的。

9

你好,使用括号确实可以很好地工作,但是这样做很不自然。我理解引号的使用(即使它们在 yaml 语法中不是必需的),但括号似乎有点太多了。另一个问题是,如果没有正确检查配置,在没有任何警告的情况下映射到已清理的字符串很容易导致错误......

2

@Chatom 我们知道这里还有一些改进的空间。这就是为什么这个问题仍然悬而未决。

4

知道什么时候可以改进吗?有没有更好的方法来解决这个问题(除了使用括号之外)?

8

@maraswrona 该问题出现在 2.x 里程碑中,这意味着将考虑将其包含在 2.3 中。

6

我真的更希望活页夹在发现未转义的属性名称时快速失败并出现异常。目前 2.2.1 通过删除特殊字符来静默修改属性名称,这对于调试来说是一场噩梦。

1

新的活页夹对属性名称更加严格,这意味着您需要将它们括在方括号中。请尝试以下操作:

shiro:
  testMap:
    "[/test1]": test1
    "[/test2]": test2

有没有办法摆脱方括号?我需要我的地图钥匙some value[value between square brackets]

7

@pablocavalieri 我相信你可以做到这一点:

testMap:
  "[some value[value between square brackets]]": "test"