Spring RestTemplate 布尔大写反序列化
Spring RestTemplate boolean caps deserialization
我正在使用 spring RestTemplate 将 json 反序列化为对象。我遇到的挑战是 json 中的布尔值都是大写的。当我尝试反序列化它们时,我得到一个 HttpMessageNotReadableException。
spring.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type java.lang.Boolean
from String "FALSE": only "true" or "false" recognized;
所以我的问题是如何为这个布尔值添加自定义映射。
ResponseEntity<List<MyObject>> responseEntity = restTemplate.exchange(url,
HttpMethod.GET,
null,
new ParameterizedTypeReference<List<MyObject>>() {
});
return responseEntity.getBody();
您可以使用自定义解串器。看一下 com.fasterxml.jackson.databind.JsonDeserializer
注释。
请参阅下面的 MyBooleanDeserializer
示例。它可以处理大写的值:
public class MyObject {
@JsonDeserialize(
using = MyBooleanDeserializer.class,
as = Boolean.class
)
private boolean bool;
}
class MyBooleanDeserializer extends JsonDeserializer {
@Override
public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return Boolean.parseBoolean(jsonParser.getValueAsString().toLowerCase());
}
}
我正在使用 spring RestTemplate 将 json 反序列化为对象。我遇到的挑战是 json 中的布尔值都是大写的。当我尝试反序列化它们时,我得到一个 HttpMessageNotReadableException。
spring.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type
java.lang.Boolean
from String "FALSE": only "true" or "false" recognized;
所以我的问题是如何为这个布尔值添加自定义映射。
ResponseEntity<List<MyObject>> responseEntity = restTemplate.exchange(url,
HttpMethod.GET,
null,
new ParameterizedTypeReference<List<MyObject>>() {
});
return responseEntity.getBody();
您可以使用自定义解串器。看一下 com.fasterxml.jackson.databind.JsonDeserializer
注释。
请参阅下面的 MyBooleanDeserializer
示例。它可以处理大写的值:
public class MyObject {
@JsonDeserialize(
using = MyBooleanDeserializer.class,
as = Boolean.class
)
private boolean bool;
}
class MyBooleanDeserializer extends JsonDeserializer {
@Override
public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return Boolean.parseBoolean(jsonParser.getValueAsString().toLowerCase());
}
}