Spring Rest 模板 - 删除操作因错误请求而失败

Spring Rest Template - Delete Operation Failing with Bad Request

我正在使用 Spring Rest 模板来执行删除操作。

我收到 400 错误请求。然而,同样的请求正在与 Postman 一起工作。 URL: http://localhost:8080/product-service/customer/123456/customer-items/US?productCode=A-124896

控制器代码:

     @DeleteMapping(value = "/customer/{customer-number}/customer-items/{country}", params = {"uline-item-number"} , produces = {"application/json"})

public ResponseEntity<Boolean> deleteCustomerItem( @PathVariable("customer-number") final String customerNumber, 
               @PathVariable("country") final String countryCode,
                @RequestParam("productCode") final String productCode) {
            try {
                return new ResponseEntity<>(appCustomerService.deleteCustomerItem(customerNumber, countryCode, productCode), HttpStatus.OK);
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
            }
        }

服务实现:

public Boolean deleteCustomerItem(String customerNumber, String countryCode, String productCode)
            throws Exception{
        Map<String, String> uriVariables = new HashMap<>();
        uriVariables.put("productCode", productCode);
        String productUrl = http://localhost:8080/product-service/customer/123456/customer-items/US";
        try {
            restTemplate.exchange(productUrl , HttpMethod.DELETE, HttpEntity.EMPTY, Void.class, uriVariables);
            return true;
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        }
    }

我是否遗漏了请求中的任何内容?请帮我解决这个问题。

你弄乱了路径参数和查询参数。以下应该可以正常工作:

    String url = "http://localhost:8080/product-service/customer/{customer-number}/customer-items/{country}";

    // Path parameters should be here
    Map<String, String> uriParams = new HashMap<>();
    uriParams.put("customer-number", "123456");
    uriParams.put("country", "US");

    URI productUri = UriComponentsBuilder.fromUriString(url)            
            .queryParam("productCode", productCode) // query parameters should be here
            .buildAndExpand(uriParams)
            .toUri();

    restTemplate.exchange(productUri, HttpMethod.DELETE, HttpEntity.EMPTY, Void.class);