如何使用 resttemplate 更新天花板列表中的值?

How can i update the value in the list of ceiling using resttemplate?

1.there 是控制器的 json 列表和我使用过的数据

[
  {
    "id" : 1,
    "cardname" : "visa gold",
    "cardnumber": "1254***548**54",
    "status" : true,
    "opposed" : false,
    "issueDate" : "21-06-2021",
    "cardbalance" : 200000,
    "validitydate" : "25-06-2021",
    "experationdate" : "30-06-2023",
    "onlinepayment" : true,
    "contactless" : true,
    "withdrawal" : false,
    "ceiling" : [{
      "maxValue" : 10000,
      "minValue" : 500,
      "value" : 100000,
      "currency" : "MAD",
      "type" : "paiment"
    }]

2.and有我的restcontroller代码

    @PutMapping("/update/{id}")
    public Ceiling update(@RequestParam Integer id, Card card){
        ParameterizedTypeReference<List<Card>> responseType = new ParameterizedTypeReference<List<Card>>() {};
        ResponseEntity<List<Card>> resp = restTemplate.exchange(GET_CARD, HttpMethod.GET, resp, responseType);
        List<Card> list = resp.getBody();
        return ;
    }

问题是 put 对列表上限中的值不起作用,他们给我错误:已解决 [org.springframework.web.bind.MissingServletRequestParameterException:必需的整数参数 'id' 不存在]

您将卡片对象作为参数,其中包含 json 对象的响应。您可以使用卡片对象更新值。

错误信息,

Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter 'id' is not present]

表示 id 请求参数不存在于 URL.

如果您将 id 作为请求参数传递,那么 URL 应该像 /update?id=12345 并且控制器方法应该如下定义,

@PutMapping("/update")
public Card update(@RequestParam(value="id") Integer id, Card card){

    RestTemplate restTemplate = new RestTemplate();
    HttpEntity<Card> request = new HttpEntity<>(card);
    ResponseEntity<Card> response = restTemplate.exchange(GET_CARD, HttpMethod.GET, request, Card.class);
    return response.getBody(); 
}

注意: 您没有提到任何关于 CardCeiling 实体之间关系的信息。所以假设 GET_CARD 端点正在更新我们通过 REST 调用传递的 card 并返回更新后的 Card 响应,我已经修改了上面的方法体。

如果您需要将 id 作为路径变量发送,那么 URL 应该像 update/{id} 并且控制器方法应该像

@PutMapping("/update/{id}")
public Card update(@PathVariable("id") Integer id, Card card){
    
    RestTemplate restTemplate = new RestTemplate();
    HttpEntity<Card> request = new HttpEntity<>(card);
    ResponseEntity<Card> response = restTemplate.exchange(GET_CARD, HttpMethod.GET, request, Card.class);
    return response.getBody(); 
}