[英]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 将requestObject
和responseObject
对象序列化为MappingJackson2HttpMessageConverter
。
请注意,如果您使用RestTemplate
以 JSON 以外的格式发送或接收数据,则需要使用HttpMessageConverter
的不同实现或编写您自己的自定义转换器。
是的,当使用 RestTemplate 时,所有对象都在过程中被序列化、反序列化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.