1

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

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

当我使用 IntelliJ 评估表达式时,我看到 attrs 包含 Cookie、Flash 等。但我无法访问这些值。我可以在 Expression Evaluator 屏幕截图中看到值

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 中的这些对象?

4

1 回答 1

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"))
于 2020-05-08T11:58:55.230 回答