RestTemplate使用

无涯子wyz發表於2024-05-10

1. 簡單介紹

RestTemplateSpring 框架 中的一個工具類,它能讓傳送 HTTP 訊息和處理響應變得簡單。RestTemplate 類提供了許多功能,非常適合編寫簡單的 HTTP 客戶端:

  • 支援所有標準 HTTP 方法(GET、POST 等)。
  • 能夠處理所有標準 MIME Type(JSON、XML、表單等)。
  • 高階 API 允許我們使用 Java 程式碼進行配置,並避免複雜的序列化問題。
  • 可使用 ClientHttpRequestInitializerClientHttpRequestInterceptor 介面進行自定義。

從 Spring Framework 5 開始,除了 WebFlux,Spring 還引入了一個名為 WebClient 的新 HTTP 客戶端。 WebClient 是一種替代 RestTemplate 的現代 HTTP 客戶端。它不僅提供傳統的同步 API,還支援高效的非阻塞和非同步方法。

2. GET方法


getForEntity相比較於getForObject可以訪問完整的 HTTP 響應。一般情況下我們使用getForObject即可。

@GetMapping("/{id}")
@Operation(summary = "根據ID查詢訂單資訊")
public ResponseResult getOrderById(@PathVariable Integer id){
    return restTemplate.getForObject(PRE_SERVER + "/pay/" + id, ResponseResult.class, id);
}

第一個引數為要訪問的URL,第二個引數為返回值的型別,第三個路徑引數值

3. POST方法

@Operation(summary = "新增支付訂單資訊")
@PostMapping
public ResponseResult saveOrder(@RequestBody PayDTO payDTO){
    return restTemplate.postForObject(PRE_SERVER+"/pay",payDTO,ResponseResult.class);
}

第二個引數是我們透過Http訪問方法的引數,第三個是返回值型別

4.PUT方法

@PutMapping
@Operation(summary = "更新訂單資訊")
public ResponseResult updateOrderById(@RequestBody PayDTO payDTO){
    restTemplate.put(PRE_SERVER + "/pay", payDTO);
    return ResponseResult.success();
}

第二個引數是我們要更新的資料

5.DELETE方法

@DeleteMapping("/{id}")
@Operation(summary = "刪除訂單資訊")
public ResponseResult deleteOrderById(@PathVariable Integer id){
    restTemplate.delete(PRE_SERVER+"/pay/" +id);
    return ResponseResult.success();
}

路徑變數也可以作為方法的第二個引數。

6.完整程式碼

@RestController
@RequestMapping("/consumer/pay")
@Tag(name = "訂單模組", description = "訂單相關介面")
public class ConsumerController {
    @Resource
    private RestTemplate restTemplate;

    private static final String PRE_SERVER = "http://localhost:8001";

    @Operation(summary = "新增支付訂單資訊")
    @PostMapping
    public ResponseResult saveOrder(@RequestBody PayDTO payDTO){
        return restTemplate.postForObject(PRE_SERVER+"/pay",payDTO,ResponseResult.class);
    }

    @GetMapping("/{id}")
    @Operation(summary = "根據ID查詢訂單資訊")
    public ResponseResult getOrderById(@PathVariable Integer id){
        return restTemplate.getForObject(PRE_SERVER + "/pay/" + id, ResponseResult.class, id);
    }

    @DeleteMapping("/{id}")
    @Operation(summary = "刪除訂單資訊")
    public ResponseResult deleteOrderById(@PathVariable Integer id){
        restTemplate.delete(PRE_SERVER+"/pay/" +id);
        return ResponseResult.success();
    }
    @PutMapping
    @Operation(summary = "更新訂單資訊")
    public ResponseResult updateOrderById(@RequestBody PayDTO payDTO){
        restTemplate.put(PRE_SERVER + "/pay", payDTO);
        return ResponseResult.success();
    }
}

需要增加配置類:

@Configuration
public class RestConfig {

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

相關文章