使用Microsoft Graph SDK for Java检查用户照片是否存在的问题
解决思路与代码示例
针对你遇到的问题,这里提供几个可行的解决方向:
1. 通过捕获异常判断照片是否存在
既然调用photo().get()会在照片不存在时抛出ImageNotFoundException,最直接的方式就是用try-catch包裹该请求,捕获异常即判定照片不存在:
try { var photo = graphClient.users().byUserId(user.getId()).photo().get(); // 请求元数据 // 照片存在,执行获取内容等逻辑 var photoStream = graphClient.users().byUserId(user.getId()).photo().content().get(); byte[] photoBytes = photoStream.readAllBytes(); var base64Photo = Base64.getEncoder().encodeToString(photoBytes); System.out.println(base64Photo); if (photo.getAdditionalData().containsKey(MEDIA_CONTENT_TYPE)) { var mimeType = photo.getAdditionalData().get(MEDIA_CONTENT_TYPE); System.out.println(mimeType); } } catch (ODataErrorException e) { // 检查异常类型是否为照片不存在 if (e.getODataError().getCode().equals("ImageNotFoundException")) { System.out.println("该用户无照片"); // 执行无照片时的逻辑 } else { // 处理其他异常 e.printStackTrace(); } }
2. 修正expand的使用方式
你提到使用expand user.photo无效,可能是SDK中expand的调用方式不对。尝试在获取用户时显式指定expand参数:
var user = graphClient.users().byUserId(user.getId()) .expand("photo") // 正确指定expand字段 .get(); // 此时尝试获取photo属性(部分场景下可能生效,取决于Graph API返回) if (user.getPhoto() != null) { // 执行后续逻辑 }
注意:即使正确使用expand,Graph API也可能不会返回用户照片的元数据(仅当照片存在且有权限时才会返回),所以这种方式可靠性不如捕获异常。
补充说明
用户对象的photo属性默认不会被返回,即使使用expand,也只有当照片存在且你的应用拥有足够权限时,才会填充该字段。因此,捕获ImageNotFoundException是目前最可靠的判断方式。
内容的提问来源于stack exchange,提问作者itstata
相关产品推荐
相关产品推荐

