我正在尝试使用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/