春季在POST请求上抛出403异常,但POSTMAN请求有效

时间:2019-08-25 07:48:50

标签: spring rest

我正在尝试将一些数据发布到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

1 个答案:

答案 0 :(得分:0)

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