【发布时间】:2020-08-08 06:14:41
【问题描述】:
我正在通过 RestTemplate 进行外部调用,如下所示:
ResponseEntity<Response> response = template.exchange("some.endpoint.com", HttpMethod.POST, request, MyClass.class);
API返回一个String格式的布尔值,如下:("0" or "1")
{
"some_lengthy_key_name" : "1"
}
我正在尝试将此响应映射到以下类。
@Getter
@JsonDeserialize(builder = MyClass.MyClassBuilder.class)
@Builder
public class MyClass{
@JsonProperty("some_lengthy_key_name")
private final boolean isValid;
}
Jackson 似乎对此不以为然,并抛出以下错误(可以理解):
不能从字符串“1”反序列化布尔类型的值,只有“真” 或“假”识别。
我不想继续将其捕获为字符串,然后再修改值。 相反,更愿意选择进行自定义反序列化并进行以下操作:
public class Deserializer extends JsonDeserializer<Boolean> {
@Override
public Boolean deserialize(JsonParser parser, DeserializationContext context) throws IOException {
return !"0".equals(parser.getText());
}
}
我现在已将 MyClass 中的字段注释如下:
@Getter
@JsonDeserialize(builder = MyClass.MyClassBuilder.class)
@Builder
public class MyClass{
@JsonDeserialize(using = Deserializer.class)
@JsonProperty("some_lengthy_key_name")
private final boolean isValid
}
但不幸的是,这也不起作用并引发相同的错误。 我能得到一些关于我在这个自定义反序列化中做错了什么的建议吗?谢谢。
【问题讨论】:
-
尝试使用布尔值而不是布尔值
-
@CodeScale 不与布尔值进行比较。
标签: java spring spring-boot jackson