gpt4 book ai didi

java - 如何实现通过 RestTemplate 执行的 PATCH?

转载 作者:行者123 更新时间:2023-11-30 02:41:28 25 4
gpt4 key购买 nike

我正在编写 JUnit 测试,通过 RestTemplate 调用我的应用程序。我已经成功实现了 GET、POST 和 PUT,但无法运行 PATCH(尽管它在客户端发送 URL 时起作用)。例如,POST 使用以下代码运行:

    RestTemplate restTemplate = new RestTemplate(); 
ProductModel postModel = restTemplate.postForObject(TestBase.URL + URL, pModel, ProductModel.class);

但是当我尝试调用restTemplate.patchForObject()(我在网上找到的)时,STS 返回一个错误,指出该函数未定义。我因此使用了这个:

    RestTemplate restTemplate = new RestTemplate(); 
ResponseEntity<MessageModel> retval = restTemplate.exchange("http://localhost:8080/products/batchUpdateProductPositions",
HttpMethod.PATCH, new HttpEntity<ProductPositionListModel>(pps), MessageModel.class);

它可以编译,但给我一个错误:

I/O Error on PATCH request for "http://localhost:8080/products/batchUpdateProductPositions": Invalid HTTP method: PATCH

在应用程序中,我在 Controller 类中定义了操作:

@RequestMapping(value = "/batchUpdateProductPositions", method = RequestMethod.PATCH)
public MessageModel batchUpdatePosition(
@RequestBody ProductPositionListModel productPositionList)
throws Exception {
try {
return productService.batchUpdatePosition(productPositionList);
} catch (Exception e) {

我在“try” block 内的 return 语句上放置了一个断点,但当我在调试下运行它时它从未跳闸。

谁能告诉我我在哪里绊倒了?

最佳答案

默认情况下,RestTemplate 使用标准 JDK HttpURLConnection HTTP 客户端来发出请求。该客户端不支持PATCH方法。您可以将 RestTemplate 配置为通过客户端工厂使用其他 HTTP 客户端,例如 HttpComponentsClientHttpRequestFactoryOkHttpClientHttpRequestFactory

HttpClient client = HttpClients.createDefault();
RestTemplate template= new RestTemplate();
template.setRequestFactory(new HttpComponentsClientHttpRequestFactory(client));

您还需要添加适当的依赖项,例如 org.apache.httpcomponents:httpclient:$version 以防 HTTP 组件客户端。

关于java - 如何实现通过 RestTemplate 执行的 PATCH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41557069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com