问题背景:使用Java开发Microsoft Graph API项目,需要通过已经拿到的Token使用http调用Graph API获取指定用户邮箱内的所有邮件文件夹。
出现下面的报错信息
Java.lang.IllegalArgumentException: Illegal character(s) in message header value
Java.lang.IllegalArgumentException: Illegal character(s) in message header value: eyJ0eXAiOiJKV1QiLCJub25jZSI6Il90cFVxMHU0cmRMWXVqSHd3TTJBUTZtUTFic2o5UXFCYnZ2NmhmbHNwZTAiLCJhbGciOiJSUzI1NiIsIng1dCI6ImpTMVhvMU9XRGpfNTJ2YndHTmd2UU8yVnpNYyIsImtpZCI6ImpTMVhvMU9XRGpfNTJ2YndHTmd2UU8yVnpNYyJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb20iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC85ZDMxNDI5Ny03NWRjLTQzMjktOGY5NC1hNjY0ODliNGI5YmIvIiwiaWF0IjoxNjUyMTkyNDkwLCJuYmYiOjE2NTIxOTI0OTAsImV4cCI6MTY1MjE5NjM5MCwiYWlvIjoiRTJaZ1lPRE1kWDVqWDJSODUyZlcxZElONWd2NkFBPT0iLC
代码片段:
public static boolean TestToken(RestTemplate restTemplate) {
String url = "https://graph.microsoft.com/v1.0/users/指定邮箱地址/mailfolders/inbox/childfolders";
String token = "eyJ0eXAiOiJKV1QiLCJub25jZSI6Il90cFVxMHU0cmRMWXVqSHd3TTJBUTZtUTFic2o5UXFCYnZ2NmhmbHNwZTAiLCJhbGciOiJSUzI1NiIsIng1dCI6ImpTMVhvMU9XRGpfNTJ2YndHTmd2UU8yVnpNYyIsImtpZCI6ImpTMVhvMU9XRGpfNTJ2YndHTmd2UU8yVnpNYyJ9.eyJhdWQiO"
try {
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", token);
headers.add("Content-Type", "application/json");
HttpEntity<String> formEntity = new HttpEntity<String>(headers);
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, formEntity,
String.class);
System.out.println(responseEntity.getBody());
return true;
} catch (Exception e) {
System.err.println(e.toString());
return false;
}
}
解决办法:Token字符串中可能存在换行符,替换掉换行就行了。
token = token.replaceAll("\n",""); // 替换掉换行就行了
Graph API介绍:
要调用此 API,需要以下权限之一。要了解详细信息,包括如何选择权限的信息,请参阅权限。https://docs.microsoft.com/zh-cn/graph/api/user-list-mailfolders?view=graph-rest-1.0&tabs=http
权限 权限类型 权限(从最低特权到最高特权)
委派(工作或学校帐户) Mail.ReadBasic、Mail.Read、Mail.ReadWrite
委派(个人 Microsoft 帐户) Mail.ReadBasic、Mail.Read、Mail.ReadWrite
应用程序 Mail.ReadBasic.All、Mail.Read、Mail.ReadWrite