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

时间:2019-05-14 19:02:37

标签: spring-restcontroller spring-rest

我正在使用Spring Rest模板执行Delete操作。

我收到400错误请求。但是,相同的要求正在与Postman一起使用。 网址: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());
        }
    }

我在请求中缺少任何内容吗?请帮助我解决此问题。

1 个答案:

答案 0 :(得分:0)

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

    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);