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

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

当我使用IntelliJ评估表达式时,我看到属性包含Cookies,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中的这些对象?

最佳答案

我发现这是使用TypedKeys的TypedMap映射。键入的密钥对于密钥的每个INSTANCE都是唯一的。
这意味着您需要使用与放入地图相同的键实例从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"))

关于java - Play Framework @ValidateWithPayload,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61639712/

10-09 17:22