Bab*_*age 5 java date spring-cloud-feign localdate
我在尝试反序列化包含 LocalDateTime 字段的 JSON POST 响应时遇到异常。
feign.codec.DecodeException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
Run Code Online (Sandbox Code Playgroud)
以下是 JSON 格式的响应:
{
"date":"2018-03-18 01:00:00.000"
}
Run Code Online (Sandbox Code Playgroud)
这就是我创建远程服务的方式:
@PostConstruct
void createService() {
remoteService = Feign.builder()
.decoder(new GsonDecoder())
.encoder(new GsonEncoder())
.target(RemoteInterface.class, remoteUrl);
}
Run Code Online (Sandbox Code Playgroud)
如何强制 Feign 将日期反序列化为 LocalDateFormat?
GsonDecoder我通过创建自己的自定义类型适配器解决了这个问题:
public class CustomGsonDecoder extends GsonDecoder {
public CustomGsonDecoder(){
super(new GsonBuilder()
.registerTypeAdapter(LocalDateTime.class, new JsonDeserializer<LocalDateTime>() {
@Override
public LocalDateTime deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
return LocalDateTime.parse(json.getAsJsonPrimitive().getAsString(), dtf);
}
}).registerTypeAdapter(LocalDateTime.class, new JsonSerializer<LocalDateTime>() {
@Override
public JsonElement serialize(LocalDateTime localDateTime, Type type, JsonSerializationContext jsonSerializationContext) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")
return new JsonPrimitive(dtf.format(localDateTime));
}
}).create());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4304 次 |
| 最近记录: |