【问题标题】:Spring throwing 403 exception on POST request but POSTMAN request workingSpring 在 POST 请求上抛出 403 异常,但 POSTMAN 请求工作
【发布时间】: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 传递对我来说不是一个好主意。
  • 但是相同的访问令牌可以访问资源

标签: spring rest


【解决方案1】:

如果您确定使用 Postman 可以获得正确的结果,那么您可以通过设置 logging.level.org.apache.http=DEBUG 为底层 httpclient(如果 apache http 客户端是底层 http 库)启用调试日志。这将打印所有请求详细信息,例如 url、标头等,您可以通过这些详细信息与您使用 Postman 发送的内容进行比较。如果客户端库有所不同,那么您可能需要编写一个拦截器来捕获所有请求详细信息,如here 所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2018-05-05
    • 2023-04-06
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多