播放框架@ValidateWithPayload

Posted

技术标签:

【中文标题】播放框架@ValidateWithPayload【英文标题】:Play Framework @ValidateWithPayload 【发布时间】:2020-05-06 15:59:53 【问题描述】:

我正在尝试使用 Java 将有效负载传递给 Play Framework 中的 validate(ValidationPayload)。我无法访问存储在返回 TypedMap 的 payload.getAttrs() 中的值。

我尝试通过调用 validate 方法 payload.getAttrs().getOptional(TypedKey.create("Cookies")) 来访问 Cookie,但我总是得到一个空值。

当我使用 IntelliJ 评估表达式时,我看到 attrs 包含 Cookie、Flash 等。但我无法访问这些值。 I can see the values in the Expression Evaluator screenshot

public String validate(Constraints.ValidationPayload payload) 
        TypedMap attrs = payload.getAttrs();
        Optional<Object> baseDomain = payload.getAttrs().getOptional(TypedKey.create("baseDomain"));

        Locale value = payload.getAttrs().get(TypedKey.create("selectedLang"));
        return "String";
    

如何访问存储在 TypedMap 中的这些对象?

【问题讨论】:

【参考方案1】:

我发现 TypedMap 地图使用 TypedKeys。键入的密钥对于密钥的每个实例都是唯一的。 这意味着您需要从 typedMap 中获取与用于放入地图中的键相同的实例。创建新密钥将导致空响应。

应该可以工作

TypedKey<String> baseDomainKey = TypedKey.create("baseDomain")
payload.getAttrs().addAttrs(baseDomainKey, "domain")
String domain = payload.getAttrs().get(baseDomainKey)

这将不起作用但是:

TypedKey<String> baseDomainKey = TypedKey.create("baseDomain")
payload.getAttrs().addAttrs(baseDomainKey, "domain")
String domain = payload.getAttrs().get(TypedKey.create("baseDomain"))

【讨论】:

您是否找到了一种方法来从已通过 play 插入的 TypedMap 中检索对象?例如会话? 我只是想从类似的帖子中链接这个答案,以防其他人偶然发现这个问题并想知道如何从正在播放的 TypedMap 访问现有对象***.com/questions/66901698/…

以上是关于播放框架@ValidateWithPayload的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 使用音乐的背景播放功能,使用MediaPlayer框架播放影片(Swift)

播放框架 2.6:NoClassDefFoundError:播放/缓存/DefaultCacheApi

在不同目录中播放框架自定义模块

北漂鱼解析开源视频播放框架,响应式布局!

播放框架和 WCF

从播放框架 2.0.8 迁移到 2.1.0 错误:缓存播放已存在