簡體   English   中英

當object需要在spring開機序列化

[英]When object needs to be serialized in spring boot

當我使用 RestTemplate 向其他微服務發送一些數據時,請求 object 和響應 object 是否需要序列化?

是的(特別是在服務之間傳輸對象時),你必須知道我們為什么要這樣做,想一想,你和我在同一個團隊工作:你應該使用 RestTemplate 向我的服務發送一些數據,現在我們每個人都使用一個同樣 class 像這樣的人:

public class Person {
    public String sex;
    public String toString() {
        return this.sex;
    }
}

如果,允許不序列化傳遞對象,因為我不喜歡和你保持相同的 class,我自己創建了一個新的 Person class。

但是有一天,由於需求的變化,你的 Person class 被修改了,像這樣:

public class Person {
    public String sex;
    public String toString() {
        return this.sex == "man" ? "woman" : "man";
    }
}

現在我們之間出現了錯誤。

但是如果序列化,每次我們改變class Person,我們改變serialVersionUID,我們可以確保我們使用相同的類\對象來使用(因為,即使我單獨創建Person class,因為每次修改serialVersionUID,當原來的Person發生變化時,我不能用我的Person來替換它。所以我必須得到原來的Person的serialVersionUID,這時候我才能看到你的修改。我會同步到我自己的class,以免出錯)。

在 Spring Boot 中使用RestTemplate向另一個微服務發送數據時,請求和響應對象可能需要序列化,具體取決於傳輸數據的格式。

重要說明 - RestTemplate已棄用 - 最好使用WebClient代替。 展望未來,RestTemplate 將在未來的版本中被棄用。

默認情況下, RestTemplate使用HttpMessageConverter接口將請求和響應對象與 HTTP 請求和響應相互轉換。 此接口有多個可用實現,包括MappingJackson2HttpMessageConverter ,可用於將對象與 JSON 相互轉換。

如果您以 JSON 以外的格式發送數據,例如 XML 或表單數據,您將需要使用HttpMessageConverter的不同實現或編寫您自己的自定義轉換器。

例如,要使用 RestTemplate 發送請求 object 作為 JSON 並接收響應 object 作為 JSON,您可以執行以下操作:

// Set up the RestTemplate with a MappingJackson2HttpMessageConverter
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

// Send the request and receive the response
ResponseEntity<ResponseObject> response = restTemplate.exchange(
    "http://example.com/api/endpoint",
    HttpMethod.POST,
    new HttpEntity<>(requestObject),
    ResponseObject.class
);

ResponseObject responseObject = response.getBody();

在此示例中,將使用 MappingJackson2HttpMessageConverter 將requestObjectresponseObject對象序列化為MappingJackson2HttpMessageConverter

請注意,如果您使用RestTemplate以 JSON 以外的格式發送或接收數據,則需要使用HttpMessageConverter的不同實現或編寫您自己的自定義轉換器。

是的,當使用 RestTemplate 時,所有對象都在過程中被序列化、反序列化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM