【发布时间】:2021-09-04 11:22:37
【问题描述】:
我有 2 个服务正在运行(前端、后端)。前端服务有 Feign Client 来连接后端 API 服务。当请求到达 Frontend 时,通过 Feign 客户端到达 Backend API。
我有一个 API 端点 GET /api/v1/person,它返回如下格式的响应
{
"firstName": "stack"
"lastName": "overflow",
"address" : {
"address1" : "xyz",
"address2" : "abc street",
"postalcode": "123456"
}
}
地址对象的数据是从外部 API 作为 JSON 字符串填充的。但是键的格式不同,所以我在 setter 和 getter 中使用 @JsonProperty 注释来正确转换它们。
class Person {
private String firstName;
private String lastName;
private Address address;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setAddress(Address address) {
this.address= address;
}
public void getAddress() {
return this.address;
}
}
public class Address {
private String address1;
private String address2;
private String postalCode;
@JsonProperty("address1")
public String getAddress1() {
return address1;
}
@JsonProperty("ADD_ONE")
public void setAddress1(String address1) {
this.address1 = address1;
}
@JsonProperty("address2")
public String getAddress2() {
return address2;
}
@JsonProperty("ADD_TWO")
public void setAddress2(String address2) {
this.address2 = address2;
}
@JsonProperty("postalCode")
public String getPostalCode() {
return postalCode;
}
@JsonProperty("PST_CDE")
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
}
从后端 API 来看,响应看起来不错且符合预期。但是当它到达前端服务时,address 对象返回为 null/empty,如下所示
{
"firstName": "stack"
"lastName": "overflow",
"address" : {}
}
如果我重命名 JSON 键并将 JSON 字符串转换为 java 对象,而不是在 Address 类中使用 @JsonProperty,我会得到预期的响应。
当我在 Address 类中使用 @JsonProperty 并将响应从后端传递到前端服务时,我不确定为什么它返回空或 null。
注意:响应对象对两种服务都是通用的。
有人可以告诉我,我在这里缺少什么吗?
谢谢。
【问题讨论】:
-
请分享地址类代码。
-
@VipulkumarGorasiya 更新了代码。
-
Getter 用于 JSON 序列化/生成,而 setter 用于从 Json 反序列化/对象创建。在您的旧代码中,您以另一种方式定义了它们。如果你切换 getter 和 setter 的注解,它会起作用。
-
代码已更新。你认为还需要改变吗?
标签: json spring spring-boot rest feign