我在构建控制器时遇到了一个问题。我正在向第三方发送GET请求并接收回数据,然后将其Map到DTO。其中一个数据是Address和AddressType。
我使用以下命令调用第三方的GET请求:
final ResponseEntity<AddressResponseDTO> response =
restTemplate.exchange(builder.build().toUri(),
HttpMethod.GET,
request,
AddressResponseDTO.class);
这是我的Json响应:
"addressType": "Mailing",
"line1": "123 Ave",
"line2": "",
"city": "New York",
"state": "NY",
最初,我使用
@JsonProperty("addressType")
private AddressType addressType;
@JsonProperty("line1")
private String line1;
@JsonProperty("line2")
private String line2;
@JsonProperty("city")
private String city;
@JsonProperty("state")
private String state;
地址类型是枚举。
public enum AddressType {
BUSINESS,
MAILING,
DELIVERY
}
问题是JSON响应返回Business而不是BUSINESS,这会引发错误。
我试着把它添加到DTO中:
@JsonProperty("addressType")
private String addressEnum;
private AddressType addressType = AddressType.valueOf(addressEnum.toUpperCase());
但它只是忽略了这一点。有没有一个简单的方法来Map业务到业务?我觉得这应该是一个简单的Springboot注解,但我找不到任何东西。
1条答案
按热度按时间vvppvyoh1#
一个可能的解决方案是使用Jackson创建一个自定义的反序列化器。这使您可以编写自定义代码来执行反序列化,从而完全控制数据的解释方式。
首先,定义一个新的反序列化器类
然后,在DTO中,使用@JsonDeserialize注解指定这个新的反序列化器类
导入com.fasterxml.Jackson.databind.annotation.JsonDeserialize;
这段代码现在将正确地反序列化JSON响应中AddressType枚举值的任何大小写变体。