【发布时间】:2019-08-25 07:48:50
【问题描述】:
我正在尝试将一些数据发布到 REST API,当我使用 SPRING REST 向 API 发送请求时,我得到了 403 异常。
我已尝试按照其他答案的建议添加用户代理标头,但到目前为止对我来说没有任何效果。我还检查了使用 POSTMAN 和调用服务时的访问密钥是否相同。任何建议都会有所帮助;
用于创建 POST 请求正文的包装类
public class ApiRequest implements Serializable {
private static final long serialVersionUID = 3729607216939594972L;
@JsonProperty("id")
List<Integer> id;
@JsonProperty("sdate")
String sdate;
@JsonProperty("edate")
String edate;
@JsonProperty("fields")
List<String> fields;
public ApiRequest(List<Integer> id, String sdate, String edate, List<String> fields){
this.id=id;
this.sdate=sdate;
this.edate=edate;
this.fields=fields;
}
public void setEdate(String edate) {
this.edate = edate;
}
public void setSdate(String sdate){
this.sdate=sdate;
}
public void setFields(List<String> fields) {
this.fields = fields;
}
public void setId(List<Integer> id) {
this.id = id;
}
public String getEdate() {
return edate;
}
public String getSdate() {
return sdate;
}
public List<String> getFields() {
return fields;
}
public List<Integer> getId() {
return id;
}
@Override
public String toString() {
return "ApiRequest{" +
"id=" + id +
", sdate=" + sdate +
", edate=" + edate +
", fields=" + fields+
'}';
}
}
调用api的代码
private HttpHeaders getRequestHeaders() {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
requestHeaders.setAccept(Arrays.asList(MediaType.ALL));
requestHeaders.set("user-agent","Some User Agent);
requestHeaders.set("access_token", "ACCESS_TOKEN");
return requestHeaders;
}
ApiRequest request=new ApiRequest(Arrays.asList(10),DateUtil.today().toString(),DateUtil.today().plusDays(10).toString(),Arrays.asList("ALL"));
String response=post("RANDOM_URL",null,null,request,getRequestHeaders(),String.class,"");
发布超级方法:
public <T> T post(String baseUrl, String url, String query, Object body, HttpHeaders requestHeaders, Class<T> responseClassType, String logTag) {
// In this method body is converted to Json String and called the restExchange
【问题讨论】:
-
403 表示您无权访问该资源。因此,要么您的访问令牌是错误的,要么它没有按照 API 的预期发送,或者它使您可以访问某些资源,但不能访问您请求的资源。将
null作为 URL 传递对我来说不是一个好主意。 -
但是相同的访问令牌可以访问资源