我这里有一个非常简单的方法:
private String claimAsString(
JWTClaimsSet claims,
String claimName,
String fallbackClaimName)
{
Object claim = claims.getClaim(claimName);
if (claim != null)
{
return (String) claim;
}
Object fallbackClaim = claims.getClaim(fallbackClaimName);
if (fallbackClaim != null)
{
return (String) fallbackClaim;
}
return null;
}
基本上是从 JWT 声明集中获取声明,如果它不存在,则获取回退值。但看起来代码的 2 块太相似了......只是想知道是否有更好的方法来重新编写它以使其更清晰。
答案 0 :(得分:4)
如果你是单线的粉丝,你可以做这样的事情:
Object claim = claims.getStringClaim(claimName);
return (String) (claim == null ? claims.getStringClaim(fallbackClaimName) : claim);
但是,您可能需要考虑将 claimAsString
方法更改为具有 Optional
返回类型。那么你可以这样做:
Optional<String> claimAsString(JWTClaimsSet claims, String claimName, String fallbackClaimName) {
return Optional.ofNullable((String) claims.get(claimName))
.or(() -> Optional.ofNullable((String) claims.get(fallbackClaimName)));
}
答案 1 :(得分:1)
如果您使用的是 Java 8,则可以在一行中完成整个操作(如果您愿意,也可以两行):
return (String) Optional.ofNullable(claims.getClaim(claimName))
.orElseGet(() -> claims.getClaim(fallbackClaimName));
如果您使用的是较旧的编译器,作为通用技术,您可以遍历两个搜索字符串:
private String claimAsString(
JWTClaimsSet claims,
String claimName,
String fallbackClaimName)
{
for (String searchedClaim : new String[] {claimName, fallbackClaimName}) {
Object claim = claims.getClaim(searchedClaim);
if (claim != null) {
return (String) claim;
}
}
return null;
}
答案 2 :(得分:1)
不太确定我是否找到了您正在使用的课程的正确文档,但您可以像这样尝试。如果未找到值,getClaim
或 getStringClaim
将返回 null,因此您不需要在那里进行 null 检查。
private String claimAsString(
JWTClaimsSet claims,
String claimName,
String fallbackClaimName)
{
String claim = claims.getStringClaim(claimName);
if (claim != null){
return claim;
}
return claims.getStringClaim(fallbackClaimName);
}