json - 带有 JSON 主体的 GET 方法和带有 RestTemplate 的承载授权
问题描述
我知道....这不是最佳做法,但有人要求我这样做:
我正在尝试获取一个接收json
具有 3 个参数的主体(int, int, int)
并具有承载身份验证的端点。
标头
header.setContentType(MediaType.APPLICATION_JSON);
header.set("authorization", bearerToken);
实体
HttpEntity<String> entity = new HttpEntity<>(requestjson.toString(), header);
休息模板
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
System.out.print(实体):
<{"1stParam":1,"2ndParam":4881,"3rdParam":0},{Content-Type=[application/json], authorization=[Bearer bearerToken]}>
除了安全性和所有此类问题外,请求还显示400 HTTP
response
via RestTemplate
,Postman 工作正常。
我也试过HttpURLConnection
但有同样的问题。
谢谢您的帮助 :)
解决方案
我刚刚编写了一个类似的解决方案,所以我很确定我知道这是什么。您必须包含Bearer
在Authorization
标题中。我认为此代码更改将解决您的问题:
header.set("Authorization", "Bearer " + bearerToken);
我将标题键大写。我不认为这很重要,但我知道大写的版本对我有用。我的代码看起来像这样,并且可以正常工作。
这里的基本思想是,Authorization
标头必须始终以正在执行的授权类型开头,以便服务器可以知道您要使用的类型。这是一个 400 错误而不是 404 是有道理的,因为标头在技术上是错误的。
推荐阅读
- javascript - JavaScript 中的错误:未捕获的 TypeError:无法将属性“值”设置为 null
- android - 在生产构建上加载图像时 GLIDE 出现奇怪的错误
- android - Firebase 身份验证回调不起作用
- excel - 从 VBA 模块自动向人员发送电子邮件
- hadoop - 如何从 hadoop ResourceManager 获取内存使用指标
- java - TransientPropertyValueException:对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例
- angularjs - Angularjs 1.0 变量值在视图中没有增加
- azure - Get-AzureRmSqlDatabaseRestorePoints 失败并出现授权错误
- javascript - Windows上的npm运行脚本错误
- javascript - JavaScript:带有 Promise 的递归函数,解析返回“未定义”