Merge remote-tracking branch 'base-version/main' into dev
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package com.zt.plat.module.system.service.integration.iwork.jackson;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonToken;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* Jackson 反序列化器,允许将诸如 "0.0"、"5" 等字符串形式的数字解析为整数,
|
||||
* 用于兼容 iWork 返回的非标准整型字段。
|
||||
*/
|
||||
public class LenientIntegerDeserializer extends JsonDeserializer<Integer> {
|
||||
|
||||
@Override
|
||||
public Integer deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException {
|
||||
JsonToken token = parser.currentToken();
|
||||
if (token == null) {
|
||||
token = parser.nextToken();
|
||||
}
|
||||
if (token == null) {
|
||||
return null;
|
||||
}
|
||||
if (token.isNumeric()) {
|
||||
return parser.getNumberValue().intValue();
|
||||
}
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
String text = parser.getText();
|
||||
if (text == null) {
|
||||
return null;
|
||||
}
|
||||
String trimmed = text.trim();
|
||||
if (trimmed.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
if (trimmed.contains(".")) {
|
||||
BigDecimal decimal = new BigDecimal(trimmed);
|
||||
return decimal.intValue();
|
||||
}
|
||||
return Integer.parseInt(trimmed);
|
||||
} catch (NumberFormatException ex) {
|
||||
return (Integer) ctxt.handleWeirdStringValue(Integer.class, trimmed,
|
||||
"无法将文本转换为整数");
|
||||
}
|
||||
}
|
||||
if (token == JsonToken.VALUE_NULL) {
|
||||
return null;
|
||||
}
|
||||
return (Integer) ctxt.handleUnexpectedToken(Integer.class, parser);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user