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);
我正在使用 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);