我遇到了以下方法的奇怪问题。
@Override
public String deleteToEe(String body) {
logger.debug("Request body");
logger.debug(body);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);
headers.add("partner", "test");
headers.add("api_key", "certxxxx");
HttpEntity<String> request = new HttpEntity<String>(body, headers);
ResponseEntity<String> result = null;
try {
result = restTemplate.exchange(targetUrl, HttpMethod.DELETE, request, String.class);
} catch (RestClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result.getBody();
}
当我通过Postman命中控制器请求映射来触发此方法时,它可以工作。但是当测试人员通过集成测试触发此方法时,或者当我使用curl
触发此方法时curl -X DELETE -H "Accept: application/json" -H "Content-type: application/json" -d "{"userName": "21", "courseId": "104882_bfaculty3_1024", "isbn": "9780323055", "schoolUserId": "1234" }" http://localhost:8080//api/provision
我在代码
中得到了一个空指针异常result = restTemplate.exchange(targetUrl, HttpMethod.DELETE, request, String.class);
我打破了代码,看起来我们有一个请求机构,但出于某种原因,它是&#39;在restTemplate.exchange()调用中被删除。以前有人见过这样的事吗?
答案 0 :(得分:0)
使用HTTP DELETE方法时,请求中不应包含任何正文。许多框架不鼓励使用它或警告你身体可能被丢弃。原因是您要删除由URI标识的某些资源,因此不需要任何正文。
听起来这可能是你的情况。这也可以解释为什么有些工具会发送身体,为什么其他工具没有。
我强烈建议您将API重新设计为与
类似的内容DELETE http://localhost:8080/api/provision/{id}
或不同的URI取决于您的数据(资源)的设计方式