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