吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1969|回复: 10
收起左侧

[求助] SpringBoot 使用Collections.singleton 过滤yml文件的值未生效

[复制链接]
ing 发表于 2019-7-15 07:47
本帖最后由 ing 于 2019-7-15 09:08 编辑

我想的结果应该是只有"User"被输出
捕获2.PNG
捕获2.PNG

实际输出结果 Roles:[USER, ADMIN]
捕获3.PNG

这是因为什么?



第2张图的完整代码
[Asm] 纯文本查看 复制代码
@Component
@ConfigurationProperties(prefix = "acme")
public class AcmeProperties {
    private boolean enabled;
    private String remoteAddress;
    private final Security security = new Security();

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getRemoteAddress() {
        return remoteAddress;
    }

    public void setRemoteAddress(String remoteAddress) {
        this.remoteAddress = remoteAddress;
    }

    public Security getSecurity() {
        return security;
    }

    public static class Security{
        private String username;
        private String password;
        private List<String> roles = new ArrayList<>(Collections.singleton("USER"));

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public List<String> getRoles() {
            return roles;
        }

        public void setRoles(List<String> roles) {
            this.roles = roles;
        }
    }
}


参考https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Vvvvvoid 发表于 2019-7-15 09:31
ArrayList 的这个构造
实际上 是把singleList 遍历扔到 arrayList 中
而在SpringBoot 配置注入的时候 arrayList 以及有俩值了,
维C糖果 发表于 2019-7-15 08:23
 楼主| ing 发表于 2019-7-15 09:01
jihousai 发表于 2019-7-15 09:08
你把 new ArrayList<>(Collections.singleton("USER")); 中的 USER 换成 GUEST 试试就明白了。
另外 Collections.singleton("USER") 返回的是一个 SingletonSet , 这个 Set 中只有一个元素,而不是 List 只有一个元素。
浅唱、聆听 发表于 2019-7-15 09:10
本帖最后由 浅唱、聆听 于 2019-7-15 09:11 编辑

你可以先看看在构造时
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
用这里的Collections.singleton("USER")单独声明一个变量 看看有什么元素在里面
VioletKiss 发表于 2019-7-15 09:19
是因为admin有ADMIN和USER的权限?所以被打印出来了?我瞎猜的
丶夜雨 发表于 2019-7-15 10:15
配置文件里面的Roles,把USER,ADMIN改成什么值,输出的就是什么值
 楼主| ing 发表于 2019-7-15 10:52
Vvvvvoid 发表于 2019-7-15 09:31
ArrayList 的这个构造
实际上 是把singleList 遍历扔到 arrayList 中
而在SpringBoot 配置注入的时候 ar ...

把singleList 遍历扔到 arrayList 中赋值的话不应该是只有一个值吗?虽然程序执行后确实是2个但我有点不理解
 楼主| ing 发表于 2019-7-15 10:55
Vvvvvoid 发表于 2019-7-15 09:31
ArrayList 的这个构造
实际上 是把singleList 遍历扔到 arrayList 中
而在SpringBoot 配置注入的时候 ar ...

这是我对
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
执行顺序的理解

Collections.singleton("USER")>new ArrayList<>()

由于singleton的值只有一个
所以new ArrayList执行的时候也只有一个。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 11:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表