Spring RestTemplate 与正文交换 DELETE jdk 1.8

Spring RestTemplate exchange DELETE with body jdk 1.8

我正在尝试通过交换方法使用 Spring RestTemplate 对正文执行 HTTP DELETE 请求,但我总是收到 400 错误请求,例如 this question。使用 JavaScript 和其他工具,可以使用 DELETE 进行此 API 调用。 我知道 java <1.8 不支持删除正文,但 1.8 应该可以:see here。我正在使用 spring-web-4.2.6.RELEASE 和 jdk 1.8,所以我认为一定有办法。

我的代码:

public DealResponse closePosition(DealCloseRequest dealCloseRequest) {
    try {
        ObjectMapper mapper = new ObjectMapper();
        //Object to JSON in String
        String jsonInString = mapper.writeValueAsString(dealCloseRequest);

        HttpEntity<String> entity = new HttpEntity<String>(jsonInString, this.headers);
        //execute request
        ResponseEntity<DealResponse> response = restTemplate.exchange("https://" + this.domain + "/gateway/deal/positions/otc", HttpMethod.DELETE, entity, DealResponse.class);
        //return filled DealResponse object
        return response.getBody();
    } catch (JsonProcessingException e) {
        this.logger.warn("could not close Position because: "+e);
        return null;
    }
}

错误信息:

org.springframework.web.client.HttpClientErrorException: 400 Bad Request

有人知道用 spring restTemplate 做这个的方法吗?

带有 body 的 HTTP DELETE 请求与 Spring 4.2 版本的其余模板一起工作正常。您发送给您的服务的请求 body 可能存在一些问题。您能否检查 "jsonInString" 是否形成正确的 json payload.Check headers 以及 "application/json" 类型。您可以通过发送 DELETE 请求使用 Postman 验证您的服务。