【问题标题】:RestTemplate for @RequestBody and @RequestParam@RequestBody 和 @RequestParam 的 RestTemplate
【发布时间】:2021-03-24 16:19:38
【问题描述】:

我正在尝试使用 RestTemplate 来调用 POST api:

RequestorParam  test = new RequestorParam();
test.setScopeMcg("MCG");
test.setSituatedDealIds(situatedDealIds);

String url = "http://localhost:" + serverPort + "/retrieveAttributes";
ResponseEntity<SituatedDeals> response = restTemplate.postForEntity(url, test, SituatedDeals.class);

控制器的代码是这样的;

  @PostMapping(value = "/retrieveAttributes", produces = "application/json")
  @ResponseBody
  @Duration
  public SituatedDeals retrieveAttributes(
        @RequestParam String scopeMcg, 
        @RequestBody SituatedDealIds situatedDealIds 
    ) {
        log.info("success")
  }

我的请求很糟糕,有人可以帮忙吗?

【问题讨论】:

  • 如果你有错误的请求错误,响应正文是什么?
  • 我在响应中得到了空对象,但是在调试时我得到了一个 resttemplate.postForEntity 一行错误的请求消息

标签: java spring-mvc resttemplate


【解决方案1】:
  1. 根据您的控制器代码,您实际上没有返回任何SituatedDeals 类型的响应实体,只是将其记录为成功。这可能是null 对象响应的原因。

  2. scopeMcg 是一个请求参数,因此您应该以请求参数格式传递它,即http://localhost:8080/retrieveAttributes?scopeMcg=MCG 参考:Spring Request Param

  3. 您的test 对象是您的发布请求的实际有效负载,它应该是SituatedDealIds 对象类型。 参考:Rest-Template post for Entity

【讨论】:

  • 感谢您的回复,但我仍然收到错误的请求,使用 restTemplate.postForEntity(url, locatedDealIds, StilledDeals.class, scopeMcg) scopeMcg is String object
  • 你能试试这个restTemplate.postForEntity(url, situatedDealIds, SituatedDeals.class); where url = http://localhost:&lt;your_port&gt;/retrieveAttributes?scopeMcg=MCG
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多