繁体   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